Python - 使用utf-8编码读取和编写csv文件

问题描述 投票:4回答:1

我正在尝试读取一个csv文件,其标题包含外来字符,我遇到了很多问题。

首先,我正在使用简单的csv.reader读取文件

filename = 'C:\\Users\\yuval\\Desktop\\בית ספר\\עבודג\\new\\resources\\mk'+ str(mkNum) + 'Data.csv'
raw_data = open(filename, 'rt', encoding="utf8")
reader = csv.reader(raw_data, delimiter=',', quoting=csv.QUOTE_NONE)
x = list(reader)
header = x[0]
data = np.array(x[1:]).astype('float')

var标头应该是一个包含文件头的数组,但它返回给我的数组是

['\ufeff"dayPart"', '"length"', '"ifPhoto"', '"ifVideo"', '"ifAlbum"', '"לא"', '"הוא"', '"בכל"', '"אותם"', '"זה"', '"הם"', '"כדי"', '"את"', '"יש"', '"לי"', '"היא"', '"אני"', '"רק"', '"להם"', '"על"', '"עם"', '"של"', '"המדינה"', '"כל"', '"גם"', '"הזה"', '"אם"', '"ישראל"', '"לכל"', '"מי"', '"ל"', '"אמסלם"', '"לנו"', '"אבל"', '"זו"', '"אין"', '"שבת"', '"שלום"', '"כ"', '"שלנו"', '"היום"', '"ומבורך"', '"ח"', '"דודי"', '"ר"', '"הפנים"', '"מה"', '"כי"', '"ה"', '"אחד"', '"ולא"', '"יותר"']

我不知道为什么它会在第一个对象和双引号中添加\ ufeff。

之后,我需要写入另一个csv文件并在标题中使用外来字符。我试图这样做,但它把字符写成奇怪的符号。

with open('C:\\Users\\yuval\\Desktop\\בית ספר\\עבודג\\new\\variance reduction 1\\mk'+ str(mkNum) + 'Data.csv', 'w', newline='', encoding='utf8') as csvFile:
    csvWriter = csv.writer(csvFile, delimiter=',')
    csvWriter.writerow(newHeader)

有没有人知道如何解决这个问题,并在csv文件的标题中使用utf8编码?

python csv encoding utf-8 export-to-csv
1个回答
2
投票

您报告了三个不同的问题。这是对蓝色的一点猜测,因为没有足够的信息可以肯定,但你应该尝试以下方法:

  1. 输入编码:如评论中所示,请尝试“utf-8-sig”。这将从您的输入中删除Byte Order Mark(BOM)。
  2. 双引号:在csv参数中,指定quoting=csv.QUOTE_NONE。这告诉csv库,CSV表是在不使用引号的情况下编写的(用于转义可能会被误认为字段或行分隔符的字符)。但是,这显然不正确,因为输入在每个字段周围都有引号。请尝试使用csv.QUOTE_MINIMAL(默认值)或csv.QUOTE_ALL
  3. 输出编码:你说输出包含“奇怪的符号”。我怀疑输出实际上是正常的,但您使用的工具默认情况下无法正确显示UTF-8文本:许多Windows应用程序(如Excel)仍然更喜欢UTF-16和本地化的8位编码,如CP-1255。与问题1一样,您应该尝试编解码器“utf-8-sig”:BOM被理解为许多观众/编辑的编码提示。
© www.soinside.com 2019 - 2024. All rights reserved.