csv 模塊專門用於讀取和寫入 csv 文件內容python
如下主要講在 python2 中的使用,在python3中有不一樣的地方,我會單獨指出來vim
通常的excel表格能夠保存爲csv格式,而後就能夠使用 csv 模塊去處理了app
1 import csv 2 3 f = open("tmp.csv", "rb") 4 # 這裏得到的 csvreader 變量其實是一個迭代器,也就是不能直接打印,須要經過for循環或者next()方法讀取,且只能讀取一次 5 csvreader = csv.reader(f) 6 for row in csvreader: 7 # 這裏的 row 爲一個列表,每一個字段爲這個列表的一個元素,注意,每一個字段都是字符串類型 8 # 爲了保證每一個字段的值先後沒有空字符,能夠使用以下方法將其處理之後得到新的列表 9 new_row = [] 10 for i in row: 11 new_row.append(i.strip())
1 f = open("tmp.csv", 'wb') 2 # 雖然讀取出來都是字符串,可是寫入時,能夠是其餘類,因此這裏的3能夠是數值,讀取該文件時仍是會都變成字符串 3 a = [["a","1"],["b","2"],["c",3]] 4 csvwriter = csv.writer(f) 5 6 for i in a: 7 # 一次寫入一行 8 csvwriter.writerow(i) 9 10 # 一次寫入多行 11 csvwriter.writerows([["d", 4], ["e", 5]]) 12 f.close()
1 # 讀文件時應用,讀取文件時,按 "|" 分隔 2 f = open("tmp1.csv","rb") 3 lines = csv.reader(f, "mydialect") 4 5 # 寫文件時應用,寫文件時,按 "|" 分隔 6 f = open("tmp1.csv","wb") 7 csvwriter = csv.writer(f, "mydialect")
1 import csv 2 import codecs 3 4 f = codecs.open("tmp1.csv", "w", "utf_8_sig") 5 csvw = csv.writer(f) 6 csvw.writerows([["中國","中文"],["abc","中文"]]) 7 f.close()
這種方法寫的csv文件,在excel中也能正常顯示中文,並且文件編碼爲utf-8函數
>>> f = open("tmp1.csv", "r") >>> csvr = csv.reader(f) >>> next(csvr) ['\ufeff中國', '中文'] >>> next(csvr) ['abc', '中文']
在python3中,編碼
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte
但python3中有個很好的方式來解決這個問題spa
python3中,open函數有一個encoding參數,能夠指定文件的編碼格式,注意,這是python2中沒有的excel
>>> f = open("tmp2.csv","r", encoding="gbk") >>> csvr = csv.reader(f) >>> a = next(csvr) >>> a[0] '中文1' >>> a[0] == '中文1' True
注意,這裏得到的中文是否是 gbk 編碼,而是 unicode 編碼,能夠直接和 unicode 編碼的中文進行比較code
>>> f = open("tmp3.csv", "w", encoding="gbk") >>> csvw = csv.writer(f) >>> csvw.writer([["中文1", "中文2"],["a","中文3"]]) >>> f.close()
這裏建立的tmp3.csv文件是 gbk 編碼格式,能夠使用excel正常查看,但可能使用vim和cat查看時是亂碼blog
vim能夠更改vimrc中的fileencodings的值,來正常查看gbk格式的中文,具體方法這裏就不介紹了ip