使用 Python 读取 csv 时将字节解析为 str

Parse bytes to str while reading csv with Python

而我 python 写入和读取 csv 文件 utf8 字符串的代码

import csv

test1='ab"cc"dd'.encode('utf8')
test2='bbb'.encode('utf8')
csv_file = open('test.csv','w')
writer= csv.writer(csv_file)
writer.writerow([test1,test2])
csv_file.close()

with open('test.csv', newline='') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=',', quotechar='"')
    print(spamreader)
    for row in spamreader:
        print(', '.join(row))

问题是当我阅读时得到的是 b'ab"cc"dd', b'bbb' 而不是 ab"cc"dd,bbb

如何解码该字符串(我必须将 utf8 放入 csv)?

您可以使用 decode() 函数将字节解码为字符串。 更多信息请点击此处:https://docs.python.org/3/library/stdtypes.html#bytes.decode

"b'ab""cc""dd'", b'bbb'".decode('utf-8')

如果它不能正常工作,在连接它们之前解码字符串(以字节表示)。

不需要手册encoding/decoding。使用您想要的特定编码打开文件,因为默认编码因 OS 配置而异。这被称为“Unicode 三明治”。 Encode/decode 当 writing/reading 文件并仅在 Python 脚本中使用 Unicode。

此外,csv.readercsv.writer 需要 Unicode 字符串,因此提供编码字节字符串是不正确的。

import csv

test1 = 'ab"cc"dd'
test2 = 'bbb'
with open('test.csv', 'w', encoding='utf8', newline='') as csv_file:
    writer= csv.writer(csv_file)
    writer.writerow([test1,test2])

with open('test.csv', encoding='utf8', newline='') as csvfile:
    spamreader = csv.reader(csvfile)
    for row in spamreader:
        print(row)
        print(', '.join(row))
['ab"cc"dd', 'bbb']
ab"cc"dd, bbb

此外,如果您希望您的 .CSV 文件在 Microsoft Excel 中可读,请使用 utf-8-sig 作为编码,否则它将无法正确检测 UTF-8。