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 cambió sys.getfilesystemencoding () para devolver "utf-8" en lugar de "mbcs"
ver PEP 529 .
Aquí está el problema: parsers.pyx
if isinstance(source, basestring):
if not isinstance(source, bytes):
source = source.encode(sys.getfilesystemencoding() or 'utf-8')
el parámetro de origen es nuestro nombre de archivo y se codificará en 'utf-8', no en 'mbcs' heredados en Python 3.6
y finalmente pasó a open () en io.c: new_file_source
por lo tanto, se interpreta como una cadena mbcs, por lo que la excepción "Archivo no encontrado" no se sorprende
tal vez esta debería ser la responsabilidad de cython para python 3.6 para manejar estas cosas utilizando la versión unicode de la API de Windows,
pero por ahora, simplemente reemplazamos sys.getfilesystemencoding () por "mbcs"
hay una solución con la velocidad comprometida:
python df = pd.read_csv (r'c: tmp 中文 .csv ', motor =' python ' )
pero es un trabajo sucio modificar cada llamada a read_csv en todos sus proyectos
esto es un duplicado de esto: https://github.com/pandas-dev/pandas/issues/15086
hay un PR adjunto, pero desafortunadamente quedó impresionado.
ciertamente tomaría una solución para esto.
No utilice nombres chinos para el nombre del archivo, cámbielo a inglés.
NO use el chino en el nombre del archivo, cámbielo a inglés.
Comentario más útil
hay una solución con la velocidad comprometida:
python df = pd.read_csv (r'c: tmp 中文 .csv ', motor =' python ' )
pero es un trabajo sucio modificar cada llamada a read_csv en todos sus proyectos