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

问题描述

虽然我编写和读取csv文件utf8字符串的python代码

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)?

解决方法

无需手动编码/解码。使用您想要的特定编码打开文件,因为默认编码因操作系统配置而异。这被称为“Unicode 三明治”。写入/读取文件时编码/解码,并且仅在 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',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。

,

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

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

如果它不能正常工作,请在加入字符串之前对其进行解码(以字节为单位)。