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 mengubah sys.getfilesystemencoding() untuk mengembalikan "utf-8" alih-alih "mbcs"
lihat PEP 529 .
Inilah masalahnya: parser.pyx
if isinstance(source, basestring):
if not isinstance(source, bytes):
source = source.encode(sys.getfilesystemencoding() or 'utf-8')
parameter sumber adalah nama file kami, dan akan dikodekan ke 'utf-8', bukan warisan 'mbcs' di python 3.6
dan akhirnya diteruskan ke open() di io.c:new_file_source
sehingga ditafsirkan sebagai string mbcs, jadi, pengecualian "File tidak ditemukan" tidak mengejutkan
mungkin ini harus menjadi tanggung jawab cython untuk python 3.6 untuk menangani hal-hal ini dengan menggunakan versi unicode dari windows API,
tapi untuk saat ini, kita hanya mengganti sys.getfilesystemencoding() menjadi "mbcs"
ada solusi dengan kecepatan yang dikompromikan:
python df = pd.read_csv(r'c:tmp中文.csv', engine='python' )
tetapi itu adalah pekerjaan kotor untuk memodifikasi setiap panggilan ke read_csv di semua proyek Anda
ini adalah duplikat dari ini: https://github.com/pandas-dev/pandas/issues/15086
ada PR yang terpasang tapi sayangnya tertiup angin.
pasti akan mengambil perbaikan untuk ini.
Jangan gunakan nama Cina untuk nama file, tetapi ubah ke bahasa Inggris.
JANGAN gunakan bahasa Cina dalam nama file, ubah ke bahasa Inggris.
Komentar yang paling membantu
ada solusi dengan kecepatan yang dikompromikan:
python df = pd.read_csv(r'c:tmp中文.csv', engine='python' )
tetapi itu adalah pekerjaan kotor untuk memodifikasi setiap panggilan ke read_csv di semua proyek Anda