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: لا شيء
فقط بلدي البنسات تستحق. جربته بسرعة على نظامي التشغيل 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'))
إنه ناجح.
يمكن لأي شخص لديه نظام متأثر التحقق من تغيير هذا الخط
إلى
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.
التعليق الأكثر فائدة
إذا أتى أي شخص إلى هنا مثلي لأنه واجه نفس المشكلة ، فإليك الحل حتى يتم إصلاح الباندا للعمل مع pep 529 (في الأساس ، ستؤدي أي أحرف غير أسكي في مسارك أو اسم الملف إلى أخطاء):
أدخل السطرين التاليين في بداية التعليمات البرمجية للعودة إلى الطريقة القديمة للتعامل مع المسارات على النوافذ: