Pandas: OSE خطأ عند قراءة ملف به علامات التشكيل في مسار الملف

تم إنشاؤها على ٩ يناير ٢٠١٧  ·  27تعليقات  ·  مصدر: pandas-dev/pandas

نموذج التعليمات البرمجية ، مثال يمكن نسخه ولصقه إن أمكن

test.txt و test_é.txt هما نفس الملف ، فقط تغيير الاسم:

pd.read_csv('test.txt')
Out[3]: 
   1 1 1
0  1 1 1
1  1 1 1

pd.read_csv('test_é.txt')
Traceback (most recent call last):

  File "<ipython-input-4-fd67679d1d17>", line 1, in <module>
    pd.read_csv('test_é.txt')

  File "d:\app\python36\lib\site-packages\pandas\io\parsers.py", line 646, in parser_f
    return _read(filepath_or_buffer, kwds)

  File "d:\app\python36\lib\site-packages\pandas\io\parsers.py", line 389, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)

  File "d:\app\python36\lib\site-packages\pandas\io\parsers.py", line 730, in __init__
    self._make_engine(self.engine)

  File "d:\app\python36\lib\site-packages\pandas\io\parsers.py", line 923, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)

  File "d:\app\python36\lib\site-packages\pandas\io\parsers.py", line 1390, in __init__
    self._reader = _parser.TextReader(src, **kwds)

  File "pandas\parser.pyx", line 373, in pandas.parser.TextReader.__cinit__ (pandas\parser.c:4184)

  File "pandas\parser.pyx", line 669, in pandas.parser.TextReader._setup_parser_source (pandas\parser.c:8471)

OSError: Initializing from file failed

وصف المشكلة

تقوم Pandas بإرجاع خطأ OSE عند محاولة قراءة ملف به علامات تمييز في مسار الملف.

المشكلة جديدة (منذ أن قمت بالترقية إلى Python 3.6 و Pandas 0.19.2)

ناتج pd.show_versions()

الإصدارات المثبتة

الالتزام: لا شيء
بيثون: 3.6.0.final.0
بتات الثعبان: 64
نظام التشغيل: Windows
إصدار نظام التشغيل: 7
الجهاز: AMD64
المعالج: Intel64 Family 6 Model 94 Stepping 3، GenuineIntel
byteorder: قليلا
LC_ALL: لا شيء
لانغ: الاب
LOCALE: لا شيء

الباندا: 0.19.2
أنف: لا شيء
النقطة: 9.0.1
أدوات الإعداد: 32.3.1
سايثون: 0.25.2
numpy: 1.11.3
scipy: 0.18.1
statsmodels: لا شيء
xarray: لا شيء
IPython: 5.1.0
أبو الهول: 1.5.1
باتسي: لا شيء
داتوتيل: ​​2.6.0
بيتز: 2016.10.21
blosc: لا شيء
عنق الزجاجة: 1.2.0
الجداول: لا شيء
numexpr: 2.6.1
matplotlib: 1.5.3
openpyxl: لا شيء
xlrd: لا شيء
xlwt: بلا
xlsxwriter: بلا
lxml: لا شيء
bs4: لا شيء
html5lib: 0.999999999
HTplib2: لا شيء
apiclient: لا شيء
sqlalchemy: 1.1.4
pymysql: لا شيء
psycopg2: لا شيء
jinja2: 2.9.3
boto: لا شيء
pandas_datareader: لا شيء

Bug IO CSV Unicode Windows

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

إذا أتى أي شخص إلى هنا مثلي لأنه واجه نفس المشكلة ، فإليك الحل حتى يتم إصلاح الباندا للعمل مع pep 529 (في الأساس ، ستؤدي أي أحرف غير أسكي في مسارك أو اسم الملف إلى أخطاء):

أدخل السطرين التاليين في بداية التعليمات البرمجية للعودة إلى الطريقة القديمة للتعامل مع المسارات على النوافذ:

import sys
sys._enablelegacywindowsfsencoding()

ال 27 كومينتر

فقط بلدي البنسات تستحق. جربته بسرعة على نظامي التشغيل Mac OSX و Ubuntu بدون
مشاكل. انظر أدناه.

هل يمكن أن تكون هذه مشكلة بيئة / منصة؟ لقد لاحظت أن LOCALE هو
تعيين إلى None.None . لسوء الحظ ليس لدي آلة ويندوز لتجربة ذلك
على سبيل المثال. من المسلم به أن هذا لن يفسر سبب رؤيتك لهذا بعد
الترقية إلى python3.6 و pandas 0.19.2.

ملاحظة: لقد قمت للتو بإعداد Virtualenv مع python3.6 وقمت بتثبيت pandas 0.19.2 باستخدام النقطة.

>>> import pandas as pd
>>> pd.read_csv('test_é.txt')
   a  b  c
0  1  2  3
1  4  5  6

إخراج pd.show_versions ()


الإصدارات المثبتة

الالتزام: لا شيء
بيثون: 3.6.0.final.0
بتات الثعبان: 64
نظام التشغيل: Linux
إصدار نظام التشغيل: 4.4.0-57 عام
الجهاز: x86_64
المعالج: x86_64
byteorder: قليلا
LC_ALL: لا شيء
LANG: en_GB.UTF-8
LOCALE: en_GB.UTF-8

الباندا: 0.19.2
أنف: لا شيء
النقطة: 9.0.1
أدوات الإعداد: 32.3.1
سايثون: لا شيء
numpy: 1.11.3
scipy: لا شيء
statsmodels: لا شيء
xarray: لا شيء
إيبيثون: لا شيء
أبو الهول: لا يوجد
باتسي: لا شيء
داتوتيل: ​​2.6.0
بيتز: 2016.10.21
blosc: لا شيء
عنق الزجاجة: لا شيء
الجداول: لا شيء
numexpr: بلا
matplotlib: لا شيء
openpyxl: لا شيء
xlrd: لا شيء
xlwt: بلا
xlsxwriter: بلا
lxml: لا شيء
bs4: لا شيء
html5lib: لا شيء
HTplib2: لا شيء
apiclient: لا شيء
sqlalchemy: لا شيء
pymysql: لا شيء
psycopg2: لا شيء
jinja2: لا شيء
boto: لا شيء
pandas_datareader: لا شيء

أعتقد أن 3.6 يبدل نظام تشفير الملفات على النوافذ إلى utf8 (من ascii). بصرف النظر عن ذلك ، ليس لدينا اختبار تمكين حتى الآن على windows لـ 3.6 (حيث أن بعض الحزم المطلوبة أصبحت متاحة الآن).

تضمين التغريدة

لذلك قمت للتو بإضافة دعم البناء على appveyor (windows) لـ 3.6 ، لذلك إذا رفعت اختباراتك لمعرفة ما إذا كانت تعمل ، فسيكون ذلك رائعًا.

كما أنني واجهت نفس المشكلة عندما توقف البرنامج عند pd.read_csv (file_path). الوضع مشابه لي بعد أن قمت بترقية python الخاص بي إلى 3.6 (لست متأكدًا من آخر مرة قمت فيها بتثبيت python هو الإصدار بالضبط ، ربما 3.5 ......).

jreback ما هي الخطوة التالية نحو الإصلاح هنا؟
لقد ذكرت أحد العلاقات العامة التي "تم تفجيرها" - ماذا يعني ذلك؟

بينما لا أستخدم Windows ، يمكنني محاولة المساعدة (حصلت للتو على VM لتصحيح جزء من الكود الخاص بي يبدو أنه لا يعمل على windows)

راجع للشغل ، حل بديل: قم بتمرير مقبض الملف بدلاً من الاسم
pd.read_csv(open('test_é.txt', 'r'))
(هناك العديد من الحلول في المشكلات ذات الصلة ، لكني لم أر هذا الحل)

tpietruszka انظر التعليقات على العلاقات العامة: https://github.com/pandas-dev/pandas/pull/15092 (تمت إزالته من مفترق خاص ، كان هناك إلى حد كبير).

تحتاج أساسًا إلى تشفير المسارات بشكل مختلف في py3.6 (مقابل الثعابين الأخرى) في wnidows. تحتاج أساسًا إلى التنفيذ: https://docs.python.org/3/whatsnew/3.6.html#pep -529-change-windows-filesystem-encoding-to-utf-8

الكود القديم (لا يمكن تشغيله):

import pandas as pd
import os
file_path='./dict/字典.csv'
df_name = pd.read_csv(file_path,sep=',' )

كود جديد (ناجح):

import pandas as pd
import os
file_path='./dict/dict.csv'
df_name = pd.read_csv(file_path,sep=',' )

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

إذا أتى أي شخص إلى هنا مثلي لأنه واجه نفس المشكلة ، فإليك الحل حتى يتم إصلاح الباندا للعمل مع pep 529 (في الأساس ، ستؤدي أي أحرف غير أسكي في مسارك أو اسم الملف إلى أخطاء):

أدخل السطرين التاليين في بداية التعليمات البرمجية للعودة إلى الطريقة القديمة للتعامل مع المسارات على النوافذ:

import sys
sys._enablelegacywindowsfsencoding()

أنا استخدم الحل أعلاه وهو يعمل. شكرا جزيلا fotisj !
ومع ذلك ، ما زلت في حيرة من أمري حول سبب عدم حدوث DataFrame.to_csv () نفس المشكلة. بمعنى آخر ، بالنسبة لمسار ملف unicode ، الكتابة على ما يرام ، بينما القراءة ليست كذلك.

المسار = os.path.join ('E: \ 语料'، 'sina.csv')
pd.read_csv (مفتوح (مسار ، 'r' ، ترميز = 'utf8'))

إنه ناجح.

يمكن لأي شخص لديه نظام متأثر التحقق من تغيير هذا الخط

https://github.com/pandas-dev/pandas/blob/e8620abc12a4c468a75adb8607fd8e0eb1c472e7/pandas/io/common.py#L209

إلى

 return _expand_user(os.fsencode(filepath_or_buffer)), None, compression

يصلحه؟

لا، ليس كذلك.
النتائج في: خطأ OSE: تم الحصول على اسم مسار الملف المتوقع أو كائن يشبه الملفنوع
(في Windows 10)

    OSError                                   Traceback (most recent call last)
    <ipython-input-2-e8247998d6d4> in <module>()
      1 
----> 2 df = pd.read_csv(r'D:\mydata\Dropbox\uni\progrs\test öäau\n\teu.csv', sep='\t')

C:\conda\lib\site-packages\pandas\io\parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, escapechar, comment, encoding, dialect, tupleize_cols, error_bad_lines, warn_bad_lines, skipfooter, skip_footer, doublequote, delim_whitespace, as_recarray, compact_ints, use_unsigned, low_memory, buffer_lines, memory_map, float_precision)
    707                     skip_blank_lines=skip_blank_lines)
    708 
--> 709         return _read(filepath_or_buffer, kwds)
    710 
    711     parser_f.__name__ = name

C:\conda\lib\site-packages\pandas\io\parsers.py in _read(filepath_or_buffer, kwds)
    447 
    448     # Create the parser.
--> 449     parser = TextFileReader(filepath_or_buffer, **kwds)
    450 
    451     if chunksize or iterator:

C:\conda\lib\site-packages\pandas\io\parsers.py in __init__(self, f, engine, **kwds)
    816             self.options['has_index_names'] = kwds['has_index_names']
    817 
--> 818         self._make_engine(self.engine)
    819 
    820     def close(self):

C:\conda\lib\site-packages\pandas\io\parsers.py in _make_engine(self, engine)
   1047     def _make_engine(self, engine='c'):
   1048         if engine == 'c':
-> 1049             self._engine = CParserWrapper(self.f, **self.options)
   1050         else:
   1051             if engine == 'python':

C:\conda\lib\site-packages\pandas\io\parsers.py in __init__(self, src, **kwds)
   1693         kwds['allow_leading_cols'] = self.index_col is not False
   1694 
-> 1695         self._reader = parsers.TextReader(src, **kwds)
   1696 
   1697         # XXX

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader.__cinit__()

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._setup_parser_source()

OSError: Expected file path name or file-like object, got <class 'bytes'> type

أه آسف. هل يعمل fsdecode هناك؟


من: Fotis Jannidis [email protected]
تاريخ الإرسال: السبت 3 فبراير 2018 الساعة 8:00:13 صباحًا
إلى: pandas-dev / pandas
نسخة إلى: Tom Augspurger ؛ تعليق
الموضوع: Re: [pandas-dev / pandas] خطأ OSE عند قراءة ملف به علامات تمييز في مسار الملف (# 15086)

لا، ليس كذلك.
النتائج في: خطأ OSE: تم الحصول على اسم مسار الملف المتوقع أو كائن يشبه الملفنوع

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرةً ، أو قم بعرضه على GitHub https://github.com/pandas-dev/pandas/issues/15086#issuecomment-362809602 ، أو تجاهل الموضوع https://github.com/notifications/unsubscribe-auth/ ABQHIplv8thHxpjsP3knUCpET0Fjy0kLks5tRGZsgaJpZM4LeTSB .

لا ، فإن استخدام fsdecode ينتج نفس الخطأ الذي كان لدينا في الأصل ( error_msg.txt )

طيب شكرا للمحاولة.


من: Fotis Jannidis [email protected]
تاريخ الإرسال: السبت 3 فبراير 2018 8:57:07 صباحًا
إلى: pandas-dev / pandas
نسخة إلى: Tom Augspurger ؛ تعليق
الموضوع: Re: [pandas-dev / pandas] خطأ OSE عند قراءة ملف به علامات تمييز في مسار الملف (# 15086)

لا ، فإن استخدام fsdecode ينتج عنه نفس الخطأ الأصلي (error_msg.txt https://github.com/pandas-dev/pandas/files/1691837/error_msg.txt )

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرةً ، أو قم بعرضه على GitHub https://github.com/pandas-dev/pandas/issues/15086#issuecomment-362818153 ، أو تجاهل الموضوع https://github.com/notifications/unsubscribe-auth/ ABQHIpeYsj9Bv3OsoHAsOufXzU3AYSBSks5tRHPCgaJpZM4LeTSB .

تحدث مع ستيف داور اليوم ، ويشتبه في أن هذا قد يكون الخط الإشكالي: https://github.com/pandas-dev/pandas/blob/e8f206d8192b409bc39da1ba1b2c5bcd8b65cc9f/pandas/_libs/src/parser/io.c#L30

IIUC ، واجهة برمجة تطبيقات نظام ملفات Windows تتوقع أن تكون تلك البايتات في MBCS ، لكننا نستخدم utf-8.

يتمثل الحل البديل على مستوى المستخدم في ترميز اسم الملف الخاص بك بشكل صريح كـ mbcs قبل تمرير اختبار الباندا إلى الباندا. https://www.python.org/dev/peps/pep-0529/#explicitly -using-mbcs

pd.read_csv(filename.encode('mbcs'))

هل يستطيع أي شخص اختبار هذا الحل؟

فقط بحاجة إلى تغيير بسيط في رمز المحلل لإصلاح ذلك (كان هناك مسؤول علاقات عامة يقوم بذلك) ولكن تم حذفه

TomAugspurger هذا لا يعمل. يتوقع read_csv قيمة str وليس قيمة bytes . فشل مع

OSError: Expected file path name or file-like object, got <class 'bytes'> type

شكرا لفحص.

يوم الجمعة 20 أبريل 2018 الساعة 3:43 مساءً ، جواو دي فيريرا إخطارات @github.com
كتب:

TomAugspurger https://github.com/TomAugspurger لا يعمل.
يتوقع read_csv قيمة str وليس قيمة بايت. فشل مع

OSError: حصلت على اسم مسار الملف المتوقع أو كائن يشبه الملفنوع

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/pandas-dev/pandas/issues/15086#issuecomment-383217062 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABQHIiOHyt3sT7B0pHJuY5lB-cJtT5JHks5tqkiEgaJpZM4LeTSB
.

فقط pinging هذا - لدي نفس المشكلة ، أنا أستخدم حلاً ولكن سيكون رائعًا إذا لم يكن ذلك مطلوبًا.

هذا يحتاج إلى رقعة المجتمع

أنا أواجه هذه المشكلة. أريد أن أحاول وأساهم في تصحيح أي مؤشرات حول كيفية البدء في إصلاح هذا؟

أعتقد أنه ليس لدى أي من المشرفين حق الوصول إلى نظام يمكنه إعادة إنتاج هذا.

ربما يمكن أن يساعد البعض الآخر في هذه المشكلة في وضع حل.

مرحبًا ، لدي هذه المشكلة على الباندا 1.0.3 الآن و sys._enablelegacywindowsfsencoding() الحل البديل توقف عن العمل. لدي ą و ź في مسار الملف.
تلقيت هذا الخطأ أيضًا على pandas 0.25.3 ولكن يبدو أن 0.23.4 يعمل بشكل جيد عند استخدام الحل البديل (لم أتحقق من الإصدارات الأخرى). يسعدني تقديم أي معلومات إضافية.

قم بإزالة الملف من نفس اسم المجلد مثل ، إذا تم تخزين الملف في نفس اسم المجلد كملف.
فقط قم بإزالة الملف من هذا المجلد.
لا تقم بتخزين الملف في نفس اسم المجلد.
ثم يعمل

pranjulknit إذا فهمت ، تقترح نقل الملف إلى مجلد بدون هذه الأحرف

في الواقع ، لدي هذه المشكلة أثناء قراءة ملف csv من دفتر jupyter.

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