Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ';无效的连续字节';-有多重编码的csv?_Python_Csv_Encoding_Utf 8 - Fatal编程技术网

Python ';无效的连续字节';-有多重编码的csv?

Python ';无效的连续字节';-有多重编码的csv?,python,csv,encoding,utf-8,Python,Csv,Encoding,Utf 8,我正在尝试用python下载并解析一个文件。我得到一个反复出现的错误,表明文件中有多个编码 我得到的文件编码使用 import urllib.request import io url = 'https://www2.census.gov/programs-surveys/popest/datasets/2010-2019/metro/totals/csa-est2019-alldata.csv' urllib.request.urlretrieve(url, 'data/source_fil

我正在尝试用python下载并解析一个文件。我得到一个反复出现的错误,表明文件中有多个编码

我得到的文件编码使用

import urllib.request 
import io
url = 'https://www2.census.gov/programs-surveys/popest/datasets/2010-2019/metro/totals/csa-est2019-alldata.csv'
urllib.request.urlretrieve(url, 'data/source_files/census/city/2010.csv')
这给了我文件编码

io.open('data/source_files/census/city/2010.csv')

<_io.TextIOWrapper name='data/source_files/census/city/2010.csv' mode='r' encoding='UTF-8'>
不管我怎么做,我都会犯一个微笑的错误

df = pd.read_csv('data/source_files/census/city/' + '2010.csv')
所有这些方法都给了我一个错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 11902: invalid continuation byte

有什么建议吗?

拉丁语-1
是一个单字节编码系列,因此它的所有内容都应该在
UTF-8
中定义。但有时拉丁-1获胜

如果显示UTF-8的错误,请使用此选项

将熊猫作为pd导入
url=”https://www2.census.gov/programs-surveys/popest/datasets/2010-2019/metro/totals/csa-est2019-alldata.csv"
data=pd.read\u csv(url,encoding='latin-1')
数据标题()
它应该显示以下数据


看起来CSV文件不是UTF-8编码的,因此您必须使用正确的选项帮助文件包装器正确解码

在这种情况下,CSV采用ANSI编码,而不是UTF-8编码:

open("...", encoding="ANSI")

第一个代码没有编码,它只是下载文件

第二个代码使用特定于操作系统的默认编码打开文件,特别是
locale.getpreferredencoding(False)
的值。UTF-8是所用操作系统的默认值,对于该文件来说是不正确的

第三个代码再次以
UTF-8
的形式打开文件,这是故障的原因,而不是
chardet

请改用
请求
库:

>>> import requests
>>> r=requests.get('https://www2.census.gov/programs-surveys/popest/datasets/2010-2019/metro/totals/csa-est2019-alldata.csv')
>>> r
<Response [200]>
>>> r.encoding
'ISO-8859-1'
导入请求 >>>r=请求。获取('https://www2.census.gov/programs-surveys/popest/datasets/2010-2019/metro/totals/csa-est2019-alldata.csv') >>>r >>>r.编码 ‘ISO-8859-1’
正确的编码是
ISO-8859-1
,也称为
latin1
<代码>r.文本将是正确解码的文本。

它似乎是在ISO 8859-15中编码的。作为补充说明,当使用chardet时,您必须提供字节,因此不要尝试将其作为文本打开-毕竟,您甚至不知道要使用的正确编码。在我的系统上,我得到未知编码:ANSI。如何修复此问题?@RishabhKumar
ANSI
mbcs
的别名,仅在Windows中可用。这是一个快捷方式,可以说使用Windows认为是本机操作系统编码的任何东西。
open("...", encoding="ANSI")
>>> import requests
>>> r=requests.get('https://www2.census.gov/programs-surveys/popest/datasets/2010-2019/metro/totals/csa-est2019-alldata.csv')
>>> r
<Response [200]>
>>> r.encoding
'ISO-8859-1'