问题描述
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.reader
和 csv.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')
如果它不能正常工作,请在加入字符串之前对其进行解码(以字节为单位)。