当前位置: 首页 > 知识库问答 >
问题:

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

步浩壤
2023-03-14

我正在使用Python 2.7.12。通过这个代码片段,我保存了一个utf-8CSV文件。我在文件的开头写下了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中。我做错了什么?

共有2个答案

庾君博
2023-03-14

在Python 3中,内置的打开函数是io.open的别名。

您只需要打开一个编码为UTF-8的BOM文件:

open(path, newline='', encoding='utf-8-sig')
import csv

...

with open(path, newline='', encoding='utf-8-sig') as csv_file:
    reader = csv.DictReader(csv_file, dialect='excel')
    for row in reader:
        print(row['first_name'], row['last_name'])
越高峻
2023-03-14

你必须告诉Open这是带有BOM的UTF-8。我知道这对io.open有用:

import io

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

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

 类似资料:
  • 问题内容: 我正在使用Python 2.7.12。使用此代码段,我保存了utf-8 csv文件。我在文件的开头写了BOM(字节顺序标记)。 我想加载该csv文件: 上面的代码将失败: 如果我打印行键,则其外观如下:。BOM已嵌入到密钥中。我究竟做错了什么? 问题答案: 您必须公开告诉您这是带有BOM的UTF-8。我知道可以与io.open一起使用: 并且您必须以文本模式“ r”而不是“ rb”打开

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

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

  • 如何在JMeter中将一个csv文件循环到另一个csv文件,其中第一个csv文件包含所有登录数据,另一个csv文件包含交易数据。我应该运行1个出纳员应该处理30笔交易的地方。

  • 我的问题是: > 如何使其与较大的文件一起工作? 有什么办法能让它快一点吗? 我的电脑有8GB的RAM,运行64位Windows 7,处理器是3.40GHz(不确定你需要什么信息)。

  • 在 Mule 4 中,我正在读取一个大型 csv 文件进行转换,需要将内容写入数据库表。csv 文件没有标头。当我默认运行集成时,第一行被跳过,就好像默认值被预先确定为标题一样。 我看了一下应用程序类型。xml,看起来头被设置为false,如下所示 任何建议都将不胜感激。谢谢