在前几年,如果你和嵌入式开发人员推荐Python,大概会是这样一种场景:

A:”诶,老王,你看Python开发这么方便,以后会不会用到嵌入式设备?“

B:“别做梦了,那玩意儿速度贼慢,肯定满足不了性能要求…”

但近几年,随着半导体行业的迅猛发展,嵌入式处理器的性能有了很大幅度的提高。与此同时,Python语言本身也在不断优化。因此,在嵌入式领域引入Python已经成为了必然趋势。

今天,作者就来总结一下使用Python处理物联网行业中一种常见的文件格式:csv文件。

Python库:csv

Python中集成了专用于处理csv文件的库,名为:csv

csv 库中有4个常用的对象:

  • csv.reader:以列表的形式返回读取的数据。
  • csv.writer:以列表的形式写入数据。
  • csv.DictReader:以字典的形式返回读取的数据。
  • csv.DictWriter:以字典的形式写入数据。

读取csv文件

假设现在要读取的csv文件内容如下:

可以看到,该文件的第一行表明数据类型,我们暂且称之为header。从第2行开始,保存的是设备采集到的数据。

使用csv.reader读取数据

# 导入 csv 库
import csv# 以读方式打开文件
with open("data.csv", mode="r", encoding="utf-8-sig") as f:# 基于打开的文件,创建csv.reader实例reader = csv.reader(f)# 获取第一行的header# header[0] = "设备编号"# header[1] = "温度"# header[2] = "湿度"# header[3] = "转速"header = next(reader)# 逐行获取数据,并输出for row in reader:print("{}{}: {}={}, {}={}, {}={}".format(header[0], row[0],header[1], row[1],header[2], row[2],header[3], row[3]))

程序运行结果如下:

设备编号0: 温度=31, 湿度=20, 转速=1000
设备编号1: 温度=30, 湿度=22, 转速=998
设备编号2: 温度=32, 湿度=23, 转速=1005

使用csv.DictReader读取数据

# 导入 csv 库
import csv# 打开文件
with open("data.csv", encoding="utf-8-sig", mode="r") as f:# 基于打开的文件,创建csv.DictReader实例reader = csv.DictReader(f)# 输出信息for row in reader:print("设备编号{}: 温度={}, 湿度={}, 转速={}".format(row["设备编号"],row["温度"],row["湿度"],row["转速"]))

程序运行结果如下:

设备编号0: 温度=31, 湿度=20, 转速=1000
设备编号1: 温度=30, 湿度=22, 转速=998
设备编号2: 温度=32, 湿度=23, 转速=1005

写入csv文件

假设我们现在要创建一个csv文件,将数据保存为如下形式:

使用csv.writer写入数据

# 导入 csv 库
import csv# 创建列表,保存header内容
header_list = ["设备编号", "温度", "湿度", "转速"]# 创建列表,保存数据
data_list = [[0, 31, 20, 1000],[1, 30, 22, 998],[2, 32, 33, 1005]
]# 以写方式打开文件。注意添加 newline="",否则会在两行数据之间都插入一行空白。
with open("new_data.csv", mode="w", encoding="utf-8-sig", newline="") as f:# 基于打开的文件,创建 csv.writer 实例writer = csv.writer(f)# 写入 header。# writerow() 一次只能写入一行。writer.writerow(header_list)# 写入数据。# writerows() 一次写入多行。writer.writerows(data_list)

使用csv.DictWriter写入数据

# 导入 csv 库
import csv# 创建 header 列表
header_list = ["设备编号", "温度", "湿度", "转速"]# 创建数据列表,列表的每个元素都是字典
data_list = [{"设备编号": "0", "温度": 31, "湿度": 20, "转速": 1000},{"设备编号": "1", "温度": 30, "湿度": 22, "转速": 998},{"设备编号": "2", "温度": 32, "湿度": 23, "转速": 1005},
]# 以写方式打开文件。注意添加 newline="",否则会在两行数据之间都插入一行空白。
with open("new_data.csv", mode="w", encoding="utf-8-sig", newline="") as f:# 基于打开的文件,创建 csv.DictWriter 实例,将 header 列表作为参数传入。writer = csv.DictWriter(f, header_list)# 写入 headerwriter.writeheader()# 写入数据writer.writerows(data_list)

关于写入,需要注意:

  • 在打开文件时,需要添加newline = ""。否则,会在每2行有效内容之间添加一行空白。
  • 如果要保存的内容有中文,而且之后需要用Excel打开文件,那么需要选用utf-8-sig编码。如果使用utf-8编码,会导致使用Excel查看文件时中文乱码。

十分钟学会如何用Python处理CSV文件相关推荐

  1. python怎么读取csv的一部分数据_python批量读取csv文件 如何用python将csv文件中的数据读取成数组...

    如何用python把多个csv文件数据处理后汇总到新csv文件你看这月光多温柔,小编转头还能看见你,一切从未坍塌. 可以用pandas读取数据,首先把文件方同一个文件价里,然后对当前文件价的所有内容循 ...

  2. python处理csv文件 sql_如何用python将csv文件写入sql数据库

    根据数据库的类型,代码会有一些细微的调整. 对于本例,我将使用SQLAlchemy和pymysql驱动程序.要确定连接字符串的第一部分应该是什么(取决于要连接到的数据库的类型),请选中SQLAlche ...

  3. 如何用python打开csv文件?

    在进行时间序列数据分析时,经常用pandas进行数据处理. 同样也会打开实现"清洁"好的数据,具体代码如下: import pandas as pd import os impor ...

  4. 十分钟学会使用fileupload插件上传文件

    使用fileupload上传文件 相关插件的安装 commons-io 官方下载地址 commons-fileupload 官方下载地址 示例 JSP完成页面展示 要完成文件上传操作,必须使用file ...

  5. 一些生活中简单可用的技能--十分钟学会,终生受益

    一些日常生活中简单可用的技能 十分钟学会,终生受益 工作 学习 生活 社交 十分钟学会,终生受益 下面的文章是从知乎高赞回答中"日常生活中有哪些十分钟就能学会并可以终生受用的技能?" ...

  6. 虚拟局域网软件开源_玩转虚拟机,十分钟学会一台电脑安装3个操作系统

    玩转虚拟机,十分钟学会一台电脑安装3个操作系统 本文目录 一.什么是虚拟机 1.普通虚拟机 2.Java虚拟机 二.虚拟机的作用 三.虚拟机的安装需求 四.常用的虚拟机软件 1.VMware虚拟机 2 ...

  7. 十分钟学会win10系统封装之系列教程(一):在VMware Workstation虚拟机上安装win10母盘系统

    关于系统封装这个话题,历来就一直受到很多小伙伴的青睐,很多同学都认为会封装系统是一件很高大上的事情,所以一直都有很多小伙伴向亦是美网络小编询问到底什么时候能出一些关于win10系统封装的教程,其实小编 ...

  8. 老滚5初始化python失败_五分钟学会怎么用python做一个简单的贪吃蛇

    Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础上开发.我们今天将利用它来制作一款大家基本都玩过的小游戏--贪吃蛇. 一.需要导入的包 import pygame ...

  9. java中xml的组装与解析(十分钟学会)

    xml的组装与解析(十分钟学会) 一.xml的解析 话不多说直接上代码 1.引入pom依赖 // 解析xml <dependency><groupId>org.jsoup< ...

  10. Python读写CSV文件

    文章目录 简介 初试 CSV读 CSV写 优雅读取 第一个值作为键名 每行读取为字典 合并读写 封装 封装1 备注 参考文献 简介 CSV,Comma-Separated Values,逗号分隔值文件 ...

最新文章

  1. 首例人工智能著作权案宣判 软件自动生成的文字内容不构成作品
  2. 第十六届智能车竞赛比赛进行中 - 参赛队员提出的问题
  3. Leetcode_No.66 Plus One
  4. 记一次死锁问题的排查和解决
  5. 深入浅出Dotnet Core的项目结构变化
  6. 算法---会议最大安排问题
  7. linux搭建rabbitmq环境,RabbitMQlinux-centos环境配置
  8. 哈夫曼树编码与译码(完整C/C++实现代码)
  9. 【网络优化|渣速必看】合理设置MTU,提升网络速度
  10. 王道考研操作系统笔记(第四章)附:王道考研408所有PPT和思维导图
  11. 三菱5uplc伺服电机指令_?2020/9/12三菱PLC触摸屏控制POWSD-伺服电机
  12. php数据库根据手机号获取归属地,PHP通过API获取手机号码归属地
  13. 马赛克战——利用人工智能和自主系统来实施决策中心作战
  14. Phaser 使用介绍
  15. 「2019纪中集训Day12」解题报告
  16. php 设置数字键盘,window_win10启动时如何设置默认打开小键盘数字输入切换键?,win10作为微软的一次重大变革 - phpStudy...
  17. Matlab_GUI gcf、gca 以及gco 的区别用法
  18. ECharts 实现世界地图
  19. win10卸载更新的方法
  20. word/wps 插入图片变糊

热门文章

  1. 【原文翻译】深度残差收缩网络 Deep Residual Shrinkage Networks for Fault Diagnosis
  2. 怎么打开.pos文件
  3. ecshop后台getshell
  4. 酒店客房管理系统总结
  5. Verilog——三角波发生器(状态机)
  6. 电脑自主发送信息--python程序
  7. 比较好的学习Linux内核的三本书
  8. WPF QQ群发助手
  9. SpaceEye :12种地球实时卫星照片壁纸
  10. 泰森多边形算法 java_泰森多边形构建原理