Pandas: فشل read_csv (filename_with_asian_locale) في python 3.6 للنوافذ

تم إنشاؤها على ٥ يونيو ٢٠١٧  ·  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" ، وليس "mbcs" القديمة في Python 3.6
وأخيرًا تم تمريره لفتح () في io.c: new_file_source
وبالتالي فُسرت كسلسلة mbcs ، لذلك ، فإن استثناء "لم يتم العثور على الملف" ليس مندهشًا
ربما يجب أن تكون هذه مسؤولية سايثون بالنسبة لبايثون 3.6 للتعامل مع هذه الأشياء باستخدام إصدار يونيكود من windows API ،
لكن في الوقت الحالي ، نستبدل sys.getfilesystemencoding () بـ "mbcs"

Duplicate IO CSV Unicode

التعليق الأكثر فائدة

هناك حل مع اختراق السرعة:
python df = pd.read_csv (r'c: tmp 中文 .csv '، المحرك =' python ' )

ولكنه عمل قذر لتعديل كل مكالمة على read_csv في جميع مشاريعك

ال 3 كومينتر

هناك حل مع اختراق السرعة:
python df = pd.read_csv (r'c: tmp 中文 .csv '، المحرك =' python ' )

ولكنه عمل قذر لتعديل كل مكالمة على read_csv في جميع مشاريعك

هذه نسخة مكررة من: https://github.com/pandas-dev/pandas/issues/15086

هناك علاقات عامة مرفقة ولكن للأسف تم تفجيرها.

بالتأكيد سوف يستغرق إصلاحًا لهذا الأمر.

لا تستخدم الأسماء الصينية لاسم الملف ، ولكن قم بتغييره إلى اللغة الإنجليزية.
لا تستخدم اللغة الصينية في اسم الملف ، قم بتغييره إلى اللغة الإنجليزية.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات