有问题的代码
with open('file.csv') as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
如果有中文在csv中,print出来的第一个key中会带有\ufeff前缀,会在你用row[key]取的时候有问题,原因是excel中用了utf_8_sig
编码,使用codecs模块读取文件就可以。
解决方案
with codecs.open('file.csv', 'r', 'utf_8_sig') as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
在写入csv的时候的问题
同理,由于使用utf_8_sig
编码,如果使用open写入csv文件的话,用excel打开中文会出现乱码问题。
写入的解决方案
类似的,使用codecs用utf_8_sig
编码写入
with codecs.open('file.csv', 'w', 'utf_8_sig') as f:
writer = csv.writer(f, dialect='excel')
writer.writerow(['啊', '正常', '了'])