Pandas: read_csv(filename_with_asian_locale) 在 python 3.6 for windows 中失败

创建于 2017-06-05  ·  3评论  ·  资料来源: pandas-dev/pandas

代码:

Python 3.6.0 |Anaconda 4.3.1 (64-bit)| (default, Dec 23 2016, 11:57:41) [MSC v.1900 64 bit (AMD64)] on win32
>>> pd.__version__
'0.20.1'
>>> import platform
>>> platform.platform()
'Windows-7-6.1.7601-SP1'
>>> import pandas as pd
>>> df = pd.read_csv(r'c:\tmp\中文.csv')
Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2881, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-6-0cd6317422e5>", line 1, in <module>
    df = pd.read_csv(r'c:\tmp\中文.csv')
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 655, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 405, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 762, in __init__
    self._make_engine(self.engine)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 966, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 1582, in __init__
    self._reader = parsers.TextReader(src, **kwds)
  File "pandas\_libs\parsers.pyx", line 394, in pandas._libs.parsers.TextReader.__cinit__ (pandas\_libs\parsers.c:4209)
  File "pandas\_libs\parsers.pyx", line 712, in pandas._libs.parsers.TextReader._setup_parser_source (pandas\_libs\parsers.c:8895)
OSError: Initializing from file failed

问题描述

python 3.6 将 sys.getfilesystemencoding() 更改为返回“utf-8”而不是“mbcs”
参见PEP 529

怎么修

这是问题所在: parsers.pyx

if isinstance(source, basestring):
     if not isinstance(source, bytes):
         source = source.encode(sys.getfilesystemencoding() or 'utf-8')

源参数是我们的文件名,将被编码为 'utf-8',而不是 Python 3.6 中的旧版 'mbcs'
最后传递给io.c:new_file_source 中的open()
因此被解释为 mbcs 字符串,因此,“找不到文件”异常并不奇怪
也许这应该是 python 3.6 的 cython 的责任,通过使用 unicode 版本的 windows API 来处理这些事情,
但现在,我们只是将 sys.getfilesystemencoding() 替换为“mbcs”

Duplicate IO CSV Unicode

最有用的评论

有一个速度受到影响的解决方法:
python df = pd.read_csv(r'c:tmp中文.csv', engine='python' )

但是在所有项目中修改对 read_csv 的每个调用都是一项肮脏的工作

所有3条评论

有一个速度受到影响的解决方法:
python df = pd.read_csv(r'c:tmp中文.csv', engine='python' )

但是在所有项目中修改对 read_csv 的每个调用都是一项肮脏的工作

这是这个的副本: https :

有一个公关,但不幸的是它被吹走了。

肯定会对此进行修复。

文件名不要用中文名,要改成英文。
Do NOT use the Chinese in the file name,change it to English.

此页面是否有帮助?
0 / 5 - 0 等级