在python中查找编码打开csv文件

2024-05-03 12:08:27 发布

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

我在理解如何检测csv文件的正确编码时遇到问题。 我创建了一个小的csv文件作为测试样本,从我想要处理的原始文件中剪切和粘贴一些行,并将这些信息保存在本地excel中,作为csv。 我的程序可以毫无问题地处理这个或类似的文件,但是当我试图打开从另一台计算机发送给我的文件时,程序会以错误退出。在

打开文件的代码部分:

with open(file_path,'r') as f:
    dialect = csv.Sniffer().sniff(f.read(1024))
    f.seek(0)
    reader = csv.DictReader(f, fieldnames=['RUT', 'Nombre', 'Telefono'], dialect=dialect)
    for row in reader:
        numeros.append(row['Telefono'])

错误:

^{pr2}$

我的locale.getpreferredencoding()是“cp1252”

我尝试了几次猜测编码:

with open(file_path,'r', encoding='cp1252') as f:

它适用于我本地生成的csv,但不适用于我发送的csv。在

with open(file_path,'r', encoding='utf-8') as f:

不适用于任何文件,但会生成不同的错误:

Traceback (most recent call last):
  File "C:/Users/.PyCharmEdu3.5/config/scratches/scratch.py", line 19, in <module>
    dialect = csv.Sniffer().sniff(f.read(1024))
  File "C:\Program Files\Python35\lib\codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd1 in position 1670: invalid continuation byte

Process finished with exit code 1

我也尝试过将newline=''添加到open()中,但没有什么不同。在

在stackoverflow的回答之后,我用记事本打开了文件,并在“另存为”中检查了编码,我的本地文件和从电子邮件收到的文件都显示为“ANSI”作为编码。在

我需要自己计算编码吗,还是python可以帮我解决?我的代码有问题吗?在

我使用的是python3.5,这些文件很像是用西班牙操作系统的计算机创建的。在

更新:我一直在做更多的测试。几乎所有的csv文件打开没有问题,程序运行正常,但有2个文件导致错误时,我试图打开他们。如果我使用excel或记事本,这些文件看起来很正常。我怀疑这些文件是用不常见的操作系统或语言创建或保存在计算机上的。在


Tags: 文件csvpathin程序编码as计算机