航天晨光股吧,刘思伟,鸡西市政府网
csv 模块专门用于读取和写入 csv 文件内容
以下主要讲在 python2 中的使用,在python3中有不同的地方,我会单独指出来
一般的excel表格可以保存为csv格式,然后就可以使用 csv 模块去处理了
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中有个很好的方式来解决这个问题
python3中,open函数有一个encoding参数,可以指定文件的编码格式,注意,这是python2中没有的
>>> f = open("tmp2.csv","r", encoding="gbk") >>> csvr = csv.reader(f) >>> a = next(csvr) >>> a[0] '中文1' >>> a[0] == '中文1' true
注意,这里获得的中文是不是 gbk 编码,而是 unicode 编码,可以直接和 unicode 编码的中文进行比较
>>> 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查看时是乱码
vim可以更改vimrc中的fileencodings的值,来正常查看gbk格式的中文,具体方法这里就不介绍了
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
新手学习Python2和Python3中print不同的用法
Python基于os.environ从windows获取环境变量
网友评论