Python 编码=";utf-8“;使用命令加载带有西班牙语字符的数据时不工作

Python 编码=";utf-8“;使用命令加载带有西班牙语字符的数据时不工作,python,django,python-3.x,pandas,parsing,Python,Django,Python 3.x,Pandas,Parsing,不知道为什么,但Django命令在读取CSV文件后无法创建大量条目。该命令在本地或在Heroku上托管时不起作用 我使用pandas库读取CSV数据,但也使用encode('utf-8') 起初它是有效的,但我必须对原始文件进行一些更改,并在保存后进行以下操作: python manage.py collectstatic 我在运行命令时出错: python manage.py ubigeo_peru 我通过将文件导入为Excel文件解决了这个问题,但是 想知道CSV有什么问题 我还看到编

不知道为什么,但Django命令在读取CSV文件后无法创建大量条目。该命令在本地或在Heroku上托管时不起作用

我使用pandas库读取CSV数据,但也使用encode('utf-8')

起初它是有效的,但我必须对原始文件进行一些更改,并在保存后进行以下操作:

python manage.py collectstatic 
我在运行命令时出错:

python manage.py ubigeo_peru
我通过将文件导入为Excel文件解决了这个问题,但是 想知道CSV有什么问题

我还看到编码错误仅在查看原始数据时出现在github上:

ubigeo_peru.py

import pandas as pd
import csv
from shop.models import Peru
from django.core.management.base import BaseCommand



tmp_data=pd.read_csv('static/data/ubigeo-peru.csv',sep=',', encoding="utf-8")

# tmp_data=pd.read_csv('static/data/ubigeo-peru.csv',sep=',')

class Command(BaseCommand):
    def handle(self, **options):
        products = [
            Peru(
                departamento=row['departamento'],
                provincia=row['provincia'],
                distrito=row['distrito'],
                costo_despacho_con_recojo=row['costo_despacho_con_recojo'],
                costo_despacho_sin_recojo=row['costo_despacho_sin_recojo'],
                dias_despacho = row['dias_despacho']

        )
            for idx, row in tmp_data.iterrows()
        ]

        Peru.objects.bulk_create(products)
在github上以及在excel上打开时,数据看起来很好

https://github.com/OmarGonD/stickers_gallito/blob/master/static/data/ubigeo-peru.csv
本地或远程运行命令时出错:

$ python manage.py ubigeo_peru
D:\virtual_envs\stickers-gallito-app\lib\site-packages\requests\__init__.py:91: RequestsDependencyWarning: urllib3 (1.25.3) or chardet (3.0.4) doesn't match a supported version!
  RequestsDependencyWarning)
Traceback (most recent call last):
  File "pandas\_libs\parsers.pyx", line 1134, in pandas._libs.parsers.TextReader._convert_tokens
  File "pandas\_libs\parsers.pyx", line 1240, in pandas._libs.parsers.TextReader._convert_with_dtype
  File "pandas\_libs\parsers.pyx", line 1256, in pandas._libs.parsers.TextReader._string_convert
  File "pandas\_libs\parsers.pyx", line 1494, in pandas._libs.parsers._string_box_utf8
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc1 in position 0: invalid start byte

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "manage.py", line 19, in <module>
    execute_from_command_line(sys.argv)
  File "D:\virtual_envs\stickers-gallito-app\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "D:\virtual_envs\stickers-gallito-app\lib\site-packages\django\core\management\__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "D:\virtual_envs\stickers-gallito-app\lib\site-packages\django\core\management\__init__.py", line 224, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "D:\virtual_envs\stickers-gallito-app\lib\site-packages\django\core\management\__init__.py", line 36, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "C:\Users\OGONZALES\AppData\Local\Programs\Python\Python37-32\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "D:\web_proyects\stickers-gallito-app\shop\management\commands\ubigeo_peru.py", line 8, in <module>
    tmp_data=pd.read_csv('static/data/ubigeo-peru.csv',sep=',', encoding="utf-8")
  File "D:\virtual_envs\stickers-gallito-app\lib\site-packages\pandas\io\parsers.py", line 678, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "D:\virtual_envs\stickers-gallito-app\lib\site-packages\pandas\io\parsers.py", line 446, in _read
    data = parser.read(nrows)
  File "D:\virtual_envs\stickers-gallito-app\lib\site-packages\pandas\io\parsers.py", line 1036, in read
    ret = self._engine.read(nrows)
  File "D:\virtual_envs\stickers-gallito-app\lib\site-packages\pandas\io\parsers.py", line 1848, in read
    data = self._reader.read(nrows)
  File "pandas\_libs\parsers.pyx", line 876, in pandas._libs.parsers.TextReader.read
  File "pandas\_libs\parsers.pyx", line 891, in pandas._libs.parsers.TextReader._read_low_memory
  File "pandas\_libs\parsers.pyx", line 968, in pandas._libs.parsers.TextReader._read_rows
  File "pandas\_libs\parsers.pyx", line 1094, in pandas._libs.parsers.TextReader._convert_column_data
  File "pandas\_libs\parsers.pyx", line 1141, in pandas._libs.parsers.TextReader._convert_tokens
  File "pandas\_libs\parsers.pyx", line 1240, in pandas._libs.parsers.TextReader._convert_with_dtype
  File "pandas\_libs\parsers.pyx", line 1256, in pandas._libs.parsers.TextReader._string_convert
  File "pandas\_libs\parsers.pyx", line 1494, in pandas._libs.parsers._string_box_utf8
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc1 in position 0: invalid start byte
(stickers-gallito-app)
$python manage.py ubigeo\u秘鲁
D:\virtual_envs\tables gallito app\lib\site packages\requests\\uuuuu init\uuuuuu.py:91:RequestsDependencyWarning:urllib3(1.25.3)或chardet(3.0.4)与支持的版本不匹配!
请求依赖(警告)
回溯(最近一次呼叫最后一次):
pandas.\u libs.parsers.TextReader.\u convert\u令牌中的文件“pandas\\u libs\parsers.pyx”,第1134行
文件“pandas\\u libs\parsers.pyx”,第1240行,在pandas.\u libs.parsers.TextReader.\u转换为\u数据类型
pandas.\u libs.parsers.TextReader.\u string\u convert中的文件“pandas\\u libs\parsers.pyx”,第1256行
pandas.\u libs.parsers.\u string\u box\u utf8中的文件“pandas\\u libs\parsers.pyx”,第1494行
UnicodeDecodeError:“utf-8”编解码器无法解码位置0中的字节0xc1:无效的开始字节
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“manage.py”,第19行,在
从命令行(sys.argv)执行命令
文件“D:\virtual\u envs\tables gallito app\lib\site packages\django\core\management\\uuuuuu init\uuuuu.py”,第381行,从命令行执行
utility.execute()
文件“D:\virtual\u envs\stickers gallito app\lib\site packages\django\core\management\\uuuuu init\uuuu.py”,第375行,在execute中
self.fetch_命令(子命令)。从_argv(self.argv)运行_
文件“D:\virtual\u envs\tables gallito app\lib\site packages\django\core\management\\uuuuuu init\uuuuu.py”,第224行,在fetch\u命令中
klass=加载命令类(应用程序名称,子命令)
加载命令类中的文件“D:\virtual\u envs\stickers gallito app\lib\site packages\django\core\management\\uuuuuu init\uuuuu.py”,第36行
模块=导入模块(“%s.management.commands.%s%”(应用程序名称,名称))
文件“C:\Users\OGONZALES\AppData\Local\Programs\Python\Python37-32\lib\importlib\\uuuuuu init\uuuuu.py”,第127行,在导入模块中
return _bootstrap._gcd_import(名称[级别:],包,级别)
文件“”,第1006行,在\u gcd\u导入中
文件“”,第983行,在_find_和_load中
文件“”,第967行,在“查找”和“加载”中解锁
文件“”,第677行,在\u加载\u解锁
exec_模块中第728行的文件“”
文件“”,第219行,在“调用”中,删除了“帧”
文件“D:\web\u proyects\tables to app\shop\management\commands\ubigeo\u peru.py”,第8行,在
tmp_data=pd.read_csv('static/data/ubigeo-peru.csv',sep=','encoding=“utf-8”)
parser\u f中的文件“D:\virtual\u envs\stickers gallito app\lib\site packages\pandas\io\parsers.py”,第678行
返回读取(文件路径或缓冲区,kwds)
文件“D:\virtual\u envs\tables-to-app\lib\site packages\pandas\io\parsers.py”,第446行,已读
data=parser.read(nrows)
文件“D:\virtual\u envs\tables-to-app\lib\site packages\pandas\io\parsers.py”,第1036行,已读
ret=自身。\发动机读取(nrows)
文件“D:\virtual\u envs\stickers-to-app\lib\site packages\pandas\io\parsers.py”,第1848行,已读
数据=自身。\读卡器读取(nrows)
文件“pandas\\ libs\parsers.pyx”,第876行,在pandas.\ libs.parsers.TextReader.read中
文件“pandas\\ libs\parsers.pyx”,第891行,在pandas.\u libs.parsers.TextReader.\u读取\u内存不足
文件“pandas\\ libs\parsers.pyx”,第968行,在pandas.\u libs.parsers.TextReader.\u read\u行中
文件“pandas\\ libs\parsers.pyx”,第1094行,在pandas.\u libs.parsers.TextReader.\u convert\u column\u data中
pandas.\u libs.parsers.TextReader.\u convert\u令牌中的文件“pandas\\u libs\parsers.pyx”,第1141行
文件“pandas\\u libs\parsers.pyx”,第1240行,在pandas.\u libs.parsers.TextReader.\u转换为\u数据类型
pandas.\u libs.parsers.TextReader.\u string\u convert中的文件“pandas\\u libs\parsers.pyx”,第1256行
pandas.\u libs.parsers.\u string\u box\u utf8中的文件“pandas\\u libs\parsers.pyx”,第1494行
UnicodeDecodeError:“utf-8”编解码器无法解码位置0中的字节0xc1:无效的开始字节
(贴在应用程序上)

根据您的提交评论,您最近的编辑是“更正该文件的编码”。然而,您所做的是将编码更改为单字节编码,可能是Windows CP 1252(或ISO 8859-1/15,所有这些都非常相似)。该文件不是UTF-8,因此当您告诉熊猫时,您是在撒谎:

tmp_data=pd.read_csv('static/data/ubigeo-peru.csv',sep=',', encoding="utf-8")
Excel将愉快地处理WindowsCP1252,显然Github用于呈现CSV文件的任何东西也会这样做。但是熊猫是按照你告诉它的编码来做的。简而言之,文件在浏览器或应用程序中正确呈现的事实并不意味着原始文件采用了您认为的编码

当Pandas的CSV阅读器点击Áncash的第一行时,会产生特定的错误,因为在西欧单字节编码中Á字符是0xC1,并且正如错误消息所说,0xC1是UTF-8文件中无法出现的少数值之一。事实上,它在这一点上阻塞意味着它没有注意到错误的编码,例如,在亚松森,这可能意味着它插入了替换字符或可能误解了输入


在任何情况下,您都应该将文件还原为UTF-8版本,或者在读取时为熊猫提供正确的编码。

根据您的提交注释,您最近的编辑是“更正”
tmp_data=pd.read_csv('static/data/ubigeo-peru.csv',sep=',', encoding="utf-8")