csv數據處理
csv表示”Comma-Separated Values(逗號分隔的值)”,csv文件時簡化的電子表格,保存為純文本文件。
python中解析csv文件可以使用csv模塊。
- 注意:csv是文本文件,通過打開文件的操作,將其內容讀入一個字符串,然后通過字符串的split()方法處理每行文本取得值。需要注意csv文件中也有自己的轉義字符,允許逗號或者其他字符作為值的一部分,split()方法無法處理這部分轉義字符。所以處理csv文件時為避免這些潛在的問題,建議使用csv模塊處理csv文件。
Reader
使用csv模塊從csv文件中讀取數據,需要創建一個Reader對象,可以通過Reader對象迭代遍歷csv文件中的每一行。
import csv
with open("example.csv", encoding='utf-8') as dataObject:
dataReader = csv.reader(dataObject)
for row in dataReader:
print("第{0}行:{1}".format(dataReader.line_num, row))
Reader對象的line_num變量是當前的行號。
輸出結果
第1行:['2018/06/09', 'Apples', '73']
第2行:['2018/06/10', 'Cherries', '85']
第3行:['2018/06/11', 'Pears', '14']
Writer
Write對象可以將數據寫入到csv文件中。
首先調用open()並傳入w,以寫模式打開一個文件。這時會創建一個對象。
然后將創建的對象傳遞給csv.writer(),創建一個Writer對象。
接下來調用Writer對象的writerow()方法寫入文件。該方法接受參數為列表,返回值為寫入文件這一行中的字符數(包括換行符)。
import csv
with open("test.csv", 'w', encoding='utf-8', newline='') as outputFile:
dataWriter = csv.writer(outputFile)
dataWriter.writerow(['a', 'b', 'c'])
dataWriter.writerow(['啊', '吧', '次'])
dataWriter.writerow(['A', 'Hello,World!', 'C'])
最后輸出結果
a,b,c
啊,吧,次
A,"Hello,World!",C
此處的Hello,Wrold!中的逗號自動轉義,使用雙引號處理了。
在windows中open()需加上newline=''參數,否則將出現2倍行距的情況。
寫入的文件必須已經存在。
delimiter 指定分隔符,默認為逗號
lineterminator 行距,默認為單倍行距
dataWriter = csv.writer(outputFile, delimiter='\t', lineterminator='\n\n')
上面表示使用制表符作為分隔符,兩倍行距(也就是行之間字符變為2個換行符)。
excel數據處理
excel的操作都是通過第三方庫來進行。常用的有xlrd、xlwt、xluntils、pyExcelerator、openpyxl。
- xlrd只能進行讀取excel文件,沒法進行寫入文件。
- xlwt可以寫入文件,但是不能在已有的excel的文件上進行修改。
vxluntils可以對文件進行復制和修改,該模塊功能實現依賴於xlrd和xlwt。 - pyExcelerator模塊與xlwt類似,也可以用來生成excel文件,同時支持單元格合並、凍結等操作。
vopenpyxl也支持文件的讀取、寫入、創建和刪除工作表、設置字體格式、單元格合並、凍結等操作。
