小编典典

Python读取csv-将BOM嵌入第一个密钥

python

我正在使用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。我究竟做错了什么?


阅读 225

收藏
2020-12-20

共1个答案

小编典典

您必须公开告诉您这是带有BOM的UTF-8。我知道可以与io.open一起使用:

import io

.
.
.
inputFile = io.open("test.csv", "r", encoding='utf-8-sig')
.
.
.

并且您必须以文本模式“ r”而不是“ rb”打开文件。

2020-12-20