Python читает csv-BOM, встроенный в первый ключ


Я использую Python 2.7.12. С помощью этого фрагмента кода я сохраняю файл формата utf-8 csv. Я написал спецификацию в начале файла.

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']. Спецификация была встроена в Ключ a. Что я делаю не так?

1 6

1 ответ:

Вы должны сказать open, что это UTF-8 с BOM. Я знаю, что это работает с Ио.открыть:

import io

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

И вы должны открыть файл в текстовом режиме, "r "вместо"rb".