SyntaxError:非ASCII字符' \ xfe'发生文件错误。 我想读取tsv文件,并更改为csv文件。当我运行此应用程序时,会发生此错误。 我写了
# coding: shift_jis
import libraries as libraries
import DataCleaning
import csv
media = 'Google'
tsv = csv.reader(file(r"data/aaa.csv"), delimiter = '\t',encoding='UTF-16')
for row in tsv:
print ", ".join(row)
我认为ASCII是错误的,但我不知道如何解决这个问题。 我的tsv文件是shift_jis,最后我想把它改成UTF-8。但我认为这个错误发生是因为我没有将编码指定为UTF-16。
答案 0 :(得分:0)
Python 2上的csv
模块不支持Unicode。您不能将encoding
作为参数传递给它,它不是可识别的参数(只有csv
格式参数被接受为关键字参数)。它无法正确使用Py2 unicode
类型,因此使用它涉及以二进制模式读取,即使这样,只有当换行符为每个字符一个字节时,它才能正常工作。每the csv
module docs:
注意:此版本的
csv
模块不支持Unicode输入。此外,目前有一些关于ASCII NUL字符的问题。因此,所有输入应为UTF-8或可打印的ASCII以确保安全;请参阅示例部分中的示例。
如果可能的话,切换到Python 3,其中csv
模块默认使用Py3的Unicode友好str
,绕过Python 2的csv
模块中的所有问题,并且encoding
可以正确传递给open
。在这种情况下,您的代码简化为:
with open(r"data/aaa.csv", encoding='utf-16', newline='') as inf:
tsv = csv.reader(inf, delimiter='\t')
# Explicit encoding argument may be needed for TextIOWrapper;
# the rewrapping is done to ensure newline='' is used as the csv module requires
csv.writer(io.TextIOWrapper(sys.stdout.buffer, newline='')).writerows(tsv)
或者将CSV写为UTF-8编码文件:
with open(r"data/aaa.csv", encoding='utf-16', newline='') as inf, open(outfilename, "w", encoding='utf-8', newline='') as outf:
tsv = csv.reader(inf, delimiter='\t')
csv.writer(outf).writerows(tsv)
如果不这样做,请查看the unicodecsv
module on PyPI,它应该在Python 2上正确处理Unicode输入。