網站首頁 編程語言 正文
前言
在前幾年,如果你和嵌入式開發人員推薦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) # 寫入 header writer.writeheader() # 寫入數據 writer.writerows(data_list)
關于寫入,需要注意:
- 在打開文件時,需要添加
newline = ""
。否則,會在每2行有效內容之間添加一行空白。 - 如果要保存的內容有中文,而且之后需要用Excel打開文件,那么需要選用
utf-8-sig
編碼。如果使用utf-8
編碼,會導致使用Excel查看文件時中文亂碼。
總結?
原文鏈接:https://blog.csdn.net/bryanwang_3099/article/details/119731390
相關推薦
- 2023-04-18 利用Python操作MongoDB數據庫的詳細指南_python
- 2022-07-02 一個Python優雅的數據分塊方法詳解_python
- 2022-06-22 android使用intent傳遞參數實現乘法計算_Android
- 2022-10-22 如何在Go中使用Casbin進行訪問控制_Golang
- 2022-09-29 Kotlin協程launch原理詳解_Android
- 2022-06-18 C語言?從根本上理解指針_C 語言
- 2022-09-15 教你如何將應用從docker-compose遷移到k8s中_docker
- 2022-05-09 python中pip安裝庫時出現Read?timed?out解決辦法_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支