我正在运行一个正在处理 30,000 个类似文件的程序。他们中的一个随机数正在停止并产生这个错误……
File "C:\Importer\src\dfman\importer.py", line 26, in import_chr
data = pd.read_csv(filepath, names=fields)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 400, in parser_f
return _read(filepath_or_buffer, kwds)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 205, in _read
return parser.read()
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 608, in read
ret = self._engine.read(nrows)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 1028, in read
data = self._reader.read(nrows)
File "parser.pyx", line 706, in pandas.parser.TextReader.read (pandas\parser.c:6745)
File "parser.pyx", line 728, in pandas.parser.TextReader._read_low_memory (pandas\parser.c:6964)
File "parser.pyx", line 804, in pandas.parser.TextReader._read_rows (pandas\parser.c:7780)
File "parser.pyx", line 890, in pandas.parser.TextReader._convert_column_data (pandas\parser.c:8793)
File "parser.pyx", line 950, in pandas.parser.TextReader._convert_tokens (pandas\parser.c:9484)
File "parser.pyx", line 1026, in pandas.parser.TextReader._convert_with_dtype (pandas\parser.c:10642)
File "parser.pyx", line 1046, in pandas.parser.TextReader._string_convert (pandas\parser.c:10853)
File "parser.pyx", line 1278, in pandas.parser._string_box_utf8 (pandas\parser.c:15657)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xda in position 6: invalid continuation byte
这些文件的来源/创建都来自同一个地方。纠正此问题以继续导入的最佳方法是什么?
原文由 TravisVOX 发布,翻译遵循 CC BY-SA 4.0 许可协议
read_csv
采用encoding
选项来处理不同格式的文件。我主要使用read_csv('file', encoding = "ISO-8859-1")
或encoding = "utf-8"
进行阅读,通常utf-8
用于to_csv
You can also use one of several
alias
options like'latin'
or'cp1252'
(Windows) instead of'ISO-8859-1'
(see python docs , also for您可能会遇到许多其他编码)。请参阅 相关的 Pandas 文档、 csv 文件上的 python 文档示例,以及关于 SO 的大量相关问题。一个好的背景资源是 每个开发人员都应该知道的关于 unicode 和字符集 的知识。
要检测编码(假设文件包含非 ascii 字符),您可以使用
enca
(参见 手册页)或file -i
(linux) 或file -I
osx)(参见 手册页)。