十分鐘教會(huì)你用Python處理CSV文件
前言
在前幾年,如果你和嵌入式開發(fā)人員推薦Python,大概會(huì)是這樣一種場(chǎng)景:
A:”誒,老王,你看Python開發(fā)這么方便,以后會(huì)不會(huì)用到嵌入式設(shè)備?“
B:“別做夢(mèng)了,那玩意兒速度賊慢,肯定滿足不了性能要求…”
但近幾年,隨著半導(dǎo)體行業(yè)的迅猛發(fā)展,嵌入式處理器的性能有了很大幅度的提高。與此同時(shí),Python語(yǔ)言本身也在不斷優(yōu)化。因此,在嵌入式領(lǐng)域引入Python已經(jīng)成為了必然趨勢(shì)。
今天,作者就來(lái)總結(jié)一下使用Python處理物聯(lián)網(wǎng)行業(yè)中一種常見的文件格式:csv文件。
Python庫(kù):csv
Python中集成了專用于處理csv文件的庫(kù),名為:csv。
csv 庫(kù)中有4個(gè)常用的對(duì)象:
csv.reader:以列表的形式返回讀取的數(shù)據(jù)。csv.writer:以列表的形式寫入數(shù)據(jù)。csv.DictReader:以字典的形式返回讀取的數(shù)據(jù)。csv.DictWriter:以字典的形式寫入數(shù)據(jù)。
讀取csv文件
假設(shè)現(xiàn)在要讀取的csv文件內(nèi)容如下:

可以看到,該文件的第一行表明數(shù)據(jù)類型,我們暫且稱之為header。從第2行開始,保存的是設(shè)備采集到的數(shù)據(jù)。
使用csv.reader讀取數(shù)據(jù)
# 導(dǎo)入 csv 庫(kù)
import csv
# 以讀方式打開文件
with open("data.csv", mode="r", encoding="utf-8-sig") as f:
# 基于打開的文件,創(chuàng)建csv.reader實(shí)例
reader = csv.reader(f)
# 獲取第一行的header
# header[0] = "設(shè)備編號(hào)"
# header[1] = "溫度"
# header[2] = "濕度"
# header[3] = "轉(zhuǎn)速"
header = next(reader)
# 逐行獲取數(shù)據(jù),并輸出
for row in reader:
print("{}{}: {}={}, {}={}, {}={}".format(header[0], row[0],
header[1], row[1],
header[2], row[2],
header[3], row[3]))程序運(yùn)行結(jié)果如下:
設(shè)備編號(hào)0: 溫度=31, 濕度=20, 轉(zhuǎn)速=1000
設(shè)備編號(hào)1: 溫度=30, 濕度=22, 轉(zhuǎn)速=998
設(shè)備編號(hào)2: 溫度=32, 濕度=23, 轉(zhuǎn)速=1005
使用csv.DictReader讀取數(shù)據(jù)
# 導(dǎo)入 csv 庫(kù)
import csv
# 打開文件
with open("data.csv", encoding="utf-8-sig", mode="r") as f:
# 基于打開的文件,創(chuàng)建csv.DictReader實(shí)例
reader = csv.DictReader(f)
# 輸出信息
for row in reader:
print("設(shè)備編號(hào){}: 溫度={}, 濕度={}, 轉(zhuǎn)速={}".format(row["設(shè)備編號(hào)"],
row["溫度"],
row["濕度"],
row["轉(zhuǎn)速"]))程序運(yùn)行結(jié)果如下:
設(shè)備編號(hào)0: 溫度=31, 濕度=20, 轉(zhuǎn)速=1000
設(shè)備編號(hào)1: 溫度=30, 濕度=22, 轉(zhuǎn)速=998
設(shè)備編號(hào)2: 溫度=32, 濕度=23, 轉(zhuǎn)速=1005
寫入csv文件
假設(shè)我們現(xiàn)在要?jiǎng)?chuàng)建一個(gè)csv文件,將數(shù)據(jù)保存為如下形式:

使用csv.writer寫入數(shù)據(jù)
# 導(dǎo)入 csv 庫(kù)
import csv
# 創(chuàng)建列表,保存header內(nèi)容
header_list = ["設(shè)備編號(hào)", "溫度", "濕度", "轉(zhuǎn)速"]
# 創(chuàng)建列表,保存數(shù)據(jù)
data_list = [
[0, 31, 20, 1000],
[1, 30, 22, 998],
[2, 32, 33, 1005]
]
# 以寫方式打開文件。注意添加 newline="",否則會(huì)在兩行數(shù)據(jù)之間都插入一行空白。
with open("new_data.csv", mode="w", encoding="utf-8-sig", newline="") as f:
# 基于打開的文件,創(chuàng)建 csv.writer 實(shí)例
writer = csv.writer(f)
# 寫入 header。
# writerow() 一次只能寫入一行。
writer.writerow(header_list)
# 寫入數(shù)據(jù)。
# writerows() 一次寫入多行。
writer.writerows(data_list)
使用csv.DictWriter寫入數(shù)據(jù)
# 導(dǎo)入 csv 庫(kù)
import csv
# 創(chuàng)建 header 列表
header_list = ["設(shè)備編號(hào)", "溫度", "濕度", "轉(zhuǎn)速"]
# 創(chuàng)建數(shù)據(jù)列表,列表的每個(gè)元素都是字典
data_list = [
{"設(shè)備編號(hào)": "0", "溫度": 31, "濕度": 20, "轉(zhuǎn)速": 1000},
{"設(shè)備編號(hào)": "1", "溫度": 30, "濕度": 22, "轉(zhuǎn)速": 998},
{"設(shè)備編號(hào)": "2", "溫度": 32, "濕度": 23, "轉(zhuǎn)速": 1005},
]
# 以寫方式打開文件。注意添加 newline="",否則會(huì)在兩行數(shù)據(jù)之間都插入一行空白。
with open("new_data.csv", mode="w", encoding="utf-8-sig", newline="") as f:
# 基于打開的文件,創(chuàng)建 csv.DictWriter 實(shí)例,將 header 列表作為參數(shù)傳入。
writer = csv.DictWriter(f, header_list)
# 寫入 header
writer.writeheader()
# 寫入數(shù)據(jù)
writer.writerows(data_list)
關(guān)于寫入,需要注意:
- 在打開文件時(shí),需要添加
newline = ""。否則,會(huì)在每2行有效內(nèi)容之間添加一行空白。 - 如果要保存的內(nèi)容有中文,而且之后需要用Excel打開文件,那么需要選用
utf-8-sig編碼。如果使用utf-8編碼,會(huì)導(dǎo)致使用Excel查看文件時(shí)中文亂碼。
總結(jié)
到此這篇關(guān)于用Python處理CSV文件的文章就介紹到這了,更多相關(guān)Python處理CSV文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
簡(jiǎn)單了解Django應(yīng)用app及分布式路由
這篇文章主要介紹了簡(jiǎn)單了解Django應(yīng)用app及分布式路由,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
python實(shí)現(xiàn)可以斷點(diǎn)續(xù)傳和并發(fā)的ftp程序
斷點(diǎn)續(xù)傳和并發(fā)是現(xiàn)在很多ftp程序都支持的功能,如果我們用python如何來(lái)做斷點(diǎn)續(xù)傳和并發(fā)了,今天來(lái)看一篇python實(shí)現(xiàn)斷點(diǎn)續(xù)傳和并發(fā)的ftp程序例子吧,具體如下。2016-09-09
python 環(huán)境搭建 及python-3.4.4的下載和安裝過(guò)程
這篇文章主要介紹了python 環(huán)境搭建 python-3.4.4的下載和安裝過(guò)程,文中給大家補(bǔ)充介紹了pycharm的基本用法,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-07-07
Django 實(shí)現(xiàn)前端圖片壓縮功能的方法
今天小編就為大家分享一篇Django 實(shí)現(xiàn)前端圖片壓縮功能的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08

