python读取和写入csv在excel乱码的解决

有问题的代码

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(['啊', '正常', '了'])

你可能感兴趣的:(python读取和写入csv在excel乱码的解决)