让我们假设我需要在Python 3.6中的.csv中编写并读取带有波兰语字符串的字符串列表:
lista=['szczęśliwy','jabłko','słoń','kot']
由于无法在.csv中编写 Unicode 字符,我将字符串编码为 utf-8 ,因此数据保存在这里该文件(全部在第一个.csv单元格内):
b'szcz\xc4\x99\xc5\x9bliwy',b'jab\xc5\x82ko',b's\xc5\x82o\xc5\x84',b'kot'
但是我无法使用以下代码解码 output.csv 文件中的数据:
with open('output.csv') as csvarchive:
entrada = csv.reader(csvarchive)
for reg in entrada:
lista2=reg
print(lista2)
["b'szcz\\xc4\\x99\\xc5\\x9bliwy'", "b'jab\\xc5\\x82ko'", "b's\\xc5\\x82o\\xc5\\x84'", "b'kot'"]
lista2
仍然是字符串列表,但是使用utf-8编码,我无法恢复特殊字符。
我尝试了几种方法,例如以'rb'
模式读取文件,再次进行编码和解码......但由于我是这些问题的新手,我没有做到。它必须有非常简单的解决方案。
答案 0 :(得分:8)
newline=''
打开CSV文件(这适用于Python csv
模块)因此,假设您的CSV文件是UTF-8编码的,请使用:
with open('output.csv', 'r', encoding='UTF-8', newline='') as csvarchive:
entrada = csv.reader(csvarchive)
for reg in entrada:
# do something with the data row, it's already decoded
同样适用于编写文件:
with open('output.csv', 'w', encoding='UTF-8', newline='') as csvarchive:
writer = csv.writer(csvarchive)
# write data to the writer, it will be encoded automatically
无需进行任何手动字符串编码。将字符串值写入csv
编写器,文件编码将透明地发生。