工业级csv阅读器(python)
以下是我的使用案例:我的工作是清理CSV文件,这些文件通常会从网页上被废弃(大多数是英文的,但一些德语和其他奇怪的非unicode字符会潜入其中)。Python3默认为“utf-8”,通常为工业级csv阅读器(python),python,csv,unicode,Python,Csv,Unicode,以下是我的使用案例:我的工作是清理CSV文件,这些文件通常会从网页上被废弃(大多数是英文的,但一些德语和其他奇怪的非unicode字符会潜入其中)。Python3默认为“utf-8”,通常为 import csv #open file with open('input.csv','r',encoding = 'utf-8') reader = csv.reader(f) 即使到处都是try/catch块,UnicodeEncodeError也会失败 如果连打开都打不开,我想不出如
import csv
#open file
with open('input.csv','r',encoding = 'utf-8')
reader = csv.reader(f)
即使到处都是try/catch块,UnicodeEncodeError也会失败
如果连打开都打不开,我想不出如何清理输入。我的最终目标只是将每一行读入一个我称之为文本的列表
我没有主意了我甚至试过以下方法:
for encoding in ('utf-8','latin-1',etc, etc):
try:
//open the file
我不能对编码做任何假设,因为它们可能是在世界另一个地方的unix机器上编写的,而我在windows机器上。输入只是简单的字符串,否则就是示例
测试用例:“这是一个测试用例的示例,当在文本处理器中打开时,测试可能会换行”可以尝试完全读取内容,然后使用bytes.decode(),方式与您提到的大致相同:
#!python3
import csv
from io import StringIO
with open('input.csv', 'rb') as binfile:
csv_bytes = binfile.readall()
for enc in ('utf-8', 'utf-16', 'latin1'):
try:
csv_string = csv_bytes.decode(encoding=enc, errors='strict')
break
except UnicodeError as e:
last_err = e
else: #none worked
raise last_err
with StringIO(csv_string) as csvfile:
csv = csv.reader(csvfile)
for row in csv:
print(row[0])
你能用字节来读取它吗?试着用各种方法来解码它?我想是Tadhg,但在Python3中,将csv读取为“wb”会引发另一个错误。我肯定有办法做到这一点我不确定那是什么。你说你试过
latin1
,它可以读取任何东西(如果不是真的latin1
),而没有“UnicodeDecodeError”,那么你到底从哪里得到错误?实际的、可复制的示例,以及精确的回溯帮助。我猜如果你有“UnicodeEncodeError”的话,print
真的会出现异常。如果你不能对编码做任何假设,你就有一个更大的问题。也许chardet
模块能帮上忙。我希望你不介意,我编辑了代码,这样如果所有编码都失败,它就不会出现namererror
。