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

Yuv*_*ium 5 python csv encoding utf-8 export-to-csv

我正在尝试读取一个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')
Run Code Online (Sandbox Code Playgroud)

var标头应为包含文件标头的数组,但返回给我的数组为

['\ufeff"dayPart"', '"length"', '"ifPhoto"', '"ifVideo"', '"ifAlbum"', '"??"', '"???"', '"???"', '"????"', '"??"', '"??"', '"???"', '"??"', '"??"', '"??"', '"???"', '"???"', '"??"', '"???"', '"??"', '"??"', '"??"', '"??????"', '"??"', '"??"', '"???"', '"??"', '"?????"', '"???"', '"??"', '"?"', '"?????"', '"???"', '"???"', '"??"', '"???"', '"???"', '"????"', '"?"', '"????"', '"????"', '"??????"', '"?"', '"????"', '"?"', '"?????"', '"??"', '"??"', '"?"', '"???"', '"???"', '"????"']
Run Code Online (Sandbox Code Playgroud)

而且我不知道为什么在第一个对象和双引号中添加\ 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)
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决此问题并在CSV文件标题中使用utf8编码吗?

len*_*enz 6

您报告了三个不同的问题。这有点猜测,因为没有足够的信息可以确定,但您应该尝试以下操作:

  1. 输入编码:按照评论中的建议,尝试“utf-8-sig”。这将从您的输入中删除字节顺序标记(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 理解为编码提示。