当前位置: 首页 > 面试题库 >

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

呼延子安
2023-03-14
问题内容

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


问题答案:

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

import io

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

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



 类似资料:
  • 我正在使用Python 2.7.12。通过这个代码片段,我保存了一个utf-8CSV文件。我在文件的开头写下了BOM(字节顺序标记)。 我想加载csv文件: 上面的代码将失败:如果我打印行键,它们的外观就是这样:。BOM表已嵌入到键中。我做错了什么?

  • 问题内容: 我正在尝试将嵌套的字典写入.csv文件。这是一个简单的示例: 这使我得到一个包含两列的表:第一个包含; 第二个包含[2,1,1](或子词典中的相应值)。我想要一个有四列的表:一列对应的列表元素,然后三列对应的列表元素。 问题答案: 更改: 至: 否则,您会尝试向csv编写类似的内容,而您的意思是。 如Padraic所述,您可能希望更改为或避免随机行为。

  • 因此,我计划使用Jupyter笔记本(Python 3)进行一些数据分析,出于协作的原因,我想将数据存储在github存储库中,但是数据集是敏感的。 因此,我希望将数据(当前为.csv)作为加密文件存储在repo上,然后在运行时对其进行解密(我猜是使用密码提示)。 最好的方法是什么?

  • 有人能帮我找出我做错了什么吗?我正在编写一个python shell脚本,它接受一个ldif文件和一个csv文件,然后将csv文件中的内容附加到ldif中每个记录的末尾。比如: 示例CSV: 样品本地设计院(ldif): 在pythonmyscript.py"sample.ldif""sample.csv"之后 到目前为止,我的代码可以编译,但不能正确修改文件。我正在创建一个对象,该对象在创建时采

  • 我有一个长长的列表,列表的形式如下--- i、 列表中的值有不同的类型——float、int、string。如何将其写入csv文件,使输出的csv文件看起来像

  • 我有一个csv文件,有几百行和13列。csv文件的结构如下(示例): 一个标题的值显示在另一个标题下。因此,当我使用read_csv时,我得到ParserError:Error标记化数据。C错误:第27458行预期有12个字段,saw 13。 关于如何清理/重新排列csv文件并将正确的列值放在正确的列下,有什么建议吗?可能创建一个新的csv或将其输入数据库。谢谢