写入csv python3时出现编解码器问题

2024-06-17 09:50:20 发布

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

output_file = open(OUTPUT_FILENAME,'w',newline='') #create new file
dict_writer = csv.DictWriter(output_file, keys)
dict_writer.writeheader()
#some logic
for row in items:
    #di dictionary
    dict_writer.writerow(di)

你好,我是python新手。我在Linux(centos)上创建了这个脚本,我运行了它,它运行得很好, 我试着在windows上运行它,但出现了这个错误

Traceback (most recent call last):
  File "C:\Users\user157\Desktop\test.py", line 180, in <module>
    dict_writer.writerow(di)
  File "C:\Users\user157\AppData\Local\Programs\Python\Python38-32\lib\csv.py", line 154, in writerow
    return self.writer.writerow(self._dict_to_list(rowdict))
  File "C:\Users\user157\AppData\Local\Programs\Python\Python38-32\lib\encodings\cp1256.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\xe3' in position 33: character maps to <undefined>

在我写字典之前,我试着用计算机来解决这个问题,但仍然是同样的错误

for k,v in di.items():
    try:
        di[k] =v.encode().decode('utf-8')
    except:
        pass

我在centos上有python 3.7.5,在windows上有python 3.8.2


1条回答
网友
1楼 · 发布于 2024-06-17 09:50:20

您需要检查Windows中的输入文件编码,并在输入文件打开语句中使用encoding=''。在windows中,默认的结尾不是“utf8”,因此如果没有使用下面的正确编码打开,则会出现编码问题

open(input_file_name,encoding='iso-8859-1')

或者最好将输入文件更改为“utf8”编码,这样脚本就可以在windoes和linux上使用,而无需修改

相关问题 更多 >