Python读取csv-将BOM嵌入第一个密钥 [英] Python read csv - BOM embedded into the first key

查看:125
本文介绍了Python读取csv-将BOM嵌入第一个密钥的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Python 2.7.12.使用此代码段,我保存了utf-8 csv文件.我在文件的开头写了BOM(字节顺序标记).

I'm using Python 2.7.12. With this code snippet I'm saving a utf-8 csv file. I wrote the BOM (byte order mark) at the beginning of the file.

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文件:

I want to load that csv file:

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中.我在做什么错了?

The above code is going to fail: KeyError: 'a' If I print the row keys this is how they look: [u'\ufeffa', u'b']. The BOM has been embedded into the key a. What am I doing wrong?

推荐答案

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

You have to tell open that this is UTF-8 with BOM. I know that works with io.open:

import io

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

您必须以文本模式"r"而不是"rb"打开文件.

And you have to open the file in text mode, "r" instead of "rb".

这篇关于Python读取csv-将BOM嵌入第一个密钥的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆