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

在python中查找编码打开的csv文件,python,csv,encoding,cp1252,Python,Csv,Encoding,Cp1252,我在理解如何检测csv文件的正确编码时遇到问题。 我创建了一个小的csv文件作为示例,用于测试、剪切和粘贴我要处理的原始文件中的一些行,并将这些信息保存在本地excel中,作为csv。 我的程序可以毫无问题地处理这个或类似的文件,但当我试图打开从另一台计算机发送给我的文件时,程序会出错退出 打开文件的代码部分: with open(file_path,'r') as f: dialect = csv.Sniffer().sniff(f.read(1024)) f.seek(0)

我在理解如何检测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'])
错误:

Traceback (most recent call last):
  File "C:/Users/.PyCharmEdu3.5/config/scratches/scratch.py", line 22, in <module>
    for row in reader:
  File "C:\Program Files\Python35\lib\csv.py", line 110, in __next__
    row = next(self.reader)
  File "C:\Program Files\Python35\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 6392: character maps to <undefined>

Process finished with exit code 1
它适用于我本地生成的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
回溯(最近一次呼叫最后一次):
文件“C:/Users/.PyCharmEdu3.5/config/scratches/scratch.py”,第19行,在
方言=csv.Sniffer().sniff(f.read(1024))
文件“C:\Program Files\Python35\lib\codecs.py”,第321行,解码中
(结果,消耗)=自身缓冲区解码(数据,自身错误,最终)
UnicodeDecodeError:“utf-8”编解码器无法解码位置1670处的字节0xd1:无效的连续字节
进程已完成,退出代码为1
我也尝试过在open()中添加
newline='
,但没有什么不同

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

我是否需要自己解决编码问题,或者python可以帮我解决?我的代码有问题吗

我使用的是Python3.5,这些文件很可能是在使用西班牙语操作系统的计算机上创建的


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

我可以看到以下输出:
offset=6392
print(ascii(打开('the_file','rb')。read()[offset-8:offset+8])
@stovfl b'BECERRA;96599251‘The’;’是这个csv上的字段分隔符,其他文件也可以。你能将这些麻烦的文件粘贴到我们可以访问的地方进行检查,然后让我知道你的意见吗?你有没有仔细检查过,同一个文件给出这样的信息:“UnicodeDecodeError:'charmap'编解码器无法解码6392位置的字节0x9d”。字节0x9d在哪里?我找到了解决方案,
encoding='latin-1'
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