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