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()を変更して、「mbcs」ではなく「utf-8」を返すようにしました。
PEP529を参照してください。
ここに問題があります: parsers.pyx
if isinstance(source, basestring):
if not isinstance(source, bytes):
source = source.encode(sys.getfilesystemencoding() or 'utf-8')
ソースパラメータはファイル名であり、Python3.6のレガシー「mbcs」ではなく「utf-8」にエンコードされます
そして最後にio.c:new_file_sourceのopen()に渡されます
したがって、mbcs文字列として解釈されるため、「ファイルが見つかりません」という例外は発生しません。
多分これは、WindowsAPIのユニコードバージョンを使用してこれらのことを処理するためのPython3.6のcythonの責任であるはずです。
ただし、今のところ、sys.getfilesystemencoding()を「mbcs」に置き換えるだけです。
速度が低下する回避策があります。
python df = pd.read_csv(r'c:tmp中文.csv '、 engine =' python ' )
しかし、すべてのプロジェクトでread_csvへのすべての呼び出しを変更するのは汚い作業です
ファイル名に中国名を使用せず、英語に変更してください。
ファイル名に中国語を使用せず、英語に変更してください。
最も参考になるコメント
速度が低下する回避策があります。
python df = pd.read_csv(r'c:tmp中文.csv '、 engine =' python ' )
しかし、すべてのプロジェクトでread_csvへのすべての呼び出しを変更するのは汚い作業です