我正在使用Python 2.7.12。使用此代码段,我保存了utf-8 csv文件。我在文件的开头写了BOM(字节顺序标记)。
import codecs import csv outputFile = open("test.csv", "wb") outputFile.write(codecs.BOM_UTF8) fieldnames = ["a", "b"] writer = csv.DictWriter(outputFile, fieldnames, delimiter=";") writer.writeheader() row = dict([]) for i in range(10): row["a"] = str(i).encode("utf-8") row["b"] = str(i*2).encode("utf-8") writer.writerow(row) outputFile.close()
我想加载该csv文件:
import codecs import csv inputFile = open("test.csv", "rb") reader = csv.DictReader(inputFile, delimiter=";") for row in reader: print row["a"] inputFile.close()
上面的代码将失败:KeyError: 'a' 如果我打印行键,则其外观如下:[u'\ufeffa', u'b']。BOM已嵌入到密钥中a。我究竟做错了什么?
KeyError: 'a'
[u'\ufeffa', u'b']
a
您必须公开告诉您这是带有BOM的UTF-8。我知道可以与io.open一起使用:
import io . . . inputFile = io.open("test.csv", "r", encoding='utf-8-sig') . . .
并且您必须以文本模式“ r”而不是“ rb”打开文件。