从CSV中写入/读取特殊字符(Python 3.6)

2024-05-19 03:41:02 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我需要在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'模式读取文件,再次编码和解码。。。但因为我是新来的,所以没能成功。一定有很简单的解决办法。


Tags: 文件csv数据字符串编码列表utfjab
1条回答
网友
1楼 · 发布于 2024-05-19 03:41:02
  1. 不要在未指定编码的情况下打开文本文件(这通常是正确的)。
  2. 始终使用newline=''打开CSV文件(这适用于Pythoncsv模块)

因此,假设您的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写入程序,文件编码将透明进行。

相关问题 更多 >

    热门问题