test.txt
und test_é.txt
sind dieselbe Datei, nur die Namensänderung:
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 geben OSError zurück, wenn sie versuchen, eine Datei mit Akzenten im Dateipfad zu lesen.
Das Problem ist neu (seit ich auf Python 3.6 und Pandas 0.19.2 aktualisiert habe)
pd.show_versions()
Festschreiben: Keine
Python: 3.6.0.final.0
Python-Bits: 64
Betriebssystem: Windows
Betriebssystem-Release: 7
Maschine: AMD64
Prozessor: Intel64 Family 6 Model 94 Stepping 3, GenuineIntel
Byteorder: wenig
LC_ALL: Keine
LANG: fr
LOCALE: Keine
Pandas: 0,19,2
Nase: Keine
pip: 9.0.1
setuptools: 32.3.1
Cython: 0,25,2
Anzahl: 1.11.3
scipy: 0.18.1
Statistikmodelle: Keine
xarray: Keine
IPython: 5.1.0
Sphinx: 1.5.1
Patsy: Keine
Datum: 2.6.0
pytz: 2016.10
blosc: Keine
Engpass: 1.2.0
Tabellen: Keine
numexpr: 2.6.1
matplotlib: 1.5.3
openpyxl: Keine
xlrd: Keine
xlwt: Keine
xlsxwriter: Keine
lxml: Keine
bs4: Keine
html5lib: 0.999999999
httplib2: Keine
apiclient: Keine
sqlalchemy: 1.1.4
pymysql: Keine
psycopg2: Keine
jinja2: 2.9.3
Boto: Keine
pandas_datareader: Keine
Nur mein Cent wert. Schnell ausprobiert unter Mac OSX und Ubuntu ohne
Probleme. Siehe unten.
Könnte dies ein Umgebungs- / Plattformproblem sein? Mir ist aufgefallen, dass das LOCALE
ist
auf None.None
. Leider habe ich keine Windows-Maschine, um dies zu versuchen
Beispiel auf. Zugegeben, das würde nicht erklären, warum Sie das nach dem gesehen haben
Upgrade auf Python3.6 und Pandas 0.19.2.
Hinweis: Ich habe gerade eine virtuelle Umgebung mit Python3.6 eingerichtet und Pandas 0.19.2 mit Pip installiert.
>>> import pandas as pd
>>> pd.read_csv('test_é.txt')
a b c
0 1 2 3
1 4 5 6
Ausgabe von pd.show_versions ()
INSTALLIERTE VERSIONEN
Festschreiben: Keine
Python: 3.6.0.final.0
Python-Bits: 64
Betriebssystem: Linux
Betriebssystemversion: 4.4.0-57-generic
Maschine: x86_64
Prozessor: x86_64
Byteorder: wenig
LC_ALL: Keine
LANG: en_GB.UTF-8
LOCALE: en_GB.UTF-8
Pandas: 0,19,2
Nase: Keine
pip: 9.0.1
setuptools: 32.3.1
Cython: Keine
Anzahl: 1.11.3
scipy: Keine
Statistikmodelle: Keine
xarray: Keine
IPython: Keine
Sphinx: Keine
Patsy: Keine
Datum: 2.6.0
pytz: 2016.10
blosc: Keine
Engpass: Keine
Tabellen: Keine
numexpr: Keine
matplotlib: Keine
openpyxl: Keine
xlrd: Keine
xlwt: Keine
xlsxwriter: Keine
lxml: Keine
bs4: Keine
html5lib: Keine
httplib2: Keine
apiclient: Keine
sqlalchemy: Keine
pymysql: Keine
psycopg2: Keine
jinja2: Keine
Boto: Keine
pandas_datareader: Keine
Ich glaube, 3.6 schaltet die Dateisystemcodierung unter Windows auf utf8 (von ASCII) um. Abgesehen davon haben wir noch keine Testaktivierung für Windows 3.6 (da einige der erforderlichen Pakete gerade verfügbar sind).
@ JGoutin
Ich habe gerade Build-Unterstützung für Appveyor (Windows) für 3.6 hinzugefügt. Wenn Sie also Ihre Tests vorantreiben würden, um zu sehen, ob es funktioniert, wäre das großartig.
Ich hatte auch das gleiche Problem, als das Programm bei pd.read_csv (file_path) gestoppt wurde. Die Situation ist ähnlich wie nach dem Upgrade meines Pythons auf 3.6 (ich bin mir nicht sicher, ob das letzte Mal, das ich installiert habe, genau die Version ist, vielleicht 3.5 ......).
@jreback was ist der nächste Schritt in Richtung einer Lösung hier?
Sie haben eine PR erwähnt, die "umgehauen" wurde - was bedeutet das?
Obwohl ich Windows nicht verwende, könnte ich versuchen zu helfen (habe gerade eine VM zum Debuggen eines Teils meines Codes, der anscheinend unter Windows nicht funktioniert).
Übrigens, eine Problemumgehung: Übergeben Sie ein Dateihandle anstelle eines Namens
pd.read_csv(open('test_é.txt', 'r'))
(Es gibt mehrere Problemumgehungen in verwandten Bereichen, aber ich habe diese nicht gesehen.)
@tpietruszka siehe Kommentare zur PR: https://github.com/pandas-dev/pandas/pull/15092 (es wurde von einer privaten Gabel entfernt, war so ziemlich da).
Grundsätzlich müssen Sie die Pfade auf py3.6 (im Vergleich zu anderen Pythons) auf wnidows anders codieren. Grundsätzlich muss Folgendes implementiert werden: https://docs.python.org/3/whatsnew/3.6.html#pep -529-change-windows-filesystem-encoding-to-utf-8
Mein alter Code (kann nicht ausgeführt werden):
import pandas as pd
import os
file_path='./dict/字典.csv'
df_name = pd.read_csv(file_path,sep=',' )
neuer Code (erfolgreich):
import pandas as pd
import os
file_path='./dict/dict.csv'
df_name = pd.read_csv(file_path,sep=',' )
Ich denke, dieser Fehler ist ein Dateinamenproblem.
Ich ändere den Dateinamen von Chinesisch auf Englisch, er kann jetzt ausgeführt werden.
Wenn jemand wie ich hierher kommt, weil er / sie das gleiche Problem hat, ist hier eine Lösung, bis pandas für die Arbeit mit pep 529 behoben ist (im Grunde führen alle Nicht-ASCII-Zeichen in Ihrem Pfad oder Dateiname zu Fehlern):
Fügen Sie die folgenden zwei Zeilen am Anfang Ihres Codes ein, um zur alten Methode der Behandlung von Pfaden in Windows zurückzukehren:
import sys
sys._enablelegacywindowsfsencoding()
Ich benutze die obige Lösung und es funktioniert. Vielen Dank @fotisj !
Ich bin jedoch immer noch verwirrt darüber, warum DataFrame.to_csv () nicht dasselbe Problem aufweist. Mit anderen Worten, für den Unicode-Dateipfad ist das Schreiben in Ordnung, das Lesen nicht.
path = os.path.join ('E: \ 语料', 'sina.csv')
pd.read_csv (offen (Pfad, 'r', Kodierung = 'utf8'))
Es ist erfolgreich.
Kann jemand mit einem betroffenen System prüfen, ob diese Zeile geändert wird?
zu
return _expand_user(os.fsencode(filepath_or_buffer)), None, compression
behebt es?
Nein, tut es nicht.
Ergebnisse in: OSError: Erwarteter Dateipfadname oder dateiähnliches Objekt, erhalten
(unter 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
Oh, das tut mir leid. Funktioniert fsdecode dort?
Von: Fotis Jannidis [email protected]
Gesendet: Samstag, 3. Februar 2018, 8:00:13 Uhr
An: pandas-dev / pandas
Cc: Tom Augspurger; Kommentar
Betreff: Betreff: [pandas-dev / pandas] OSError beim Lesen einer Datei mit Akzenten im Dateipfad (# 15086)
Nein, tut es nicht.
Ergebnisse in: OSError: Erwarteter Dateipfadname oder dateiähnliches Objekt, erhalten
- -
Sie erhalten dies, weil Sie kommentiert haben.
Antworten Sie direkt auf diese E-Mail, zeigen Sie sie auf GitHub https://github.com/pandas-dev/pandas/issues/15086#issuecomment-362809602 an oder schalten Sie den Thread https://github.com/notifications/unsubscribe-auth/ stumm.
Nein. Die Verwendung von fsdecode erzeugt den gleichen Fehler, den wir ursprünglich hatten ( error_msg.txt ).
Ok, danke, dass du es versucht hast.
Von: Fotis Jannidis [email protected]
Gesendet: Samstag, 3. Februar 2018, 08:57:07 Uhr
An: pandas-dev / pandas
Cc: Tom Augspurger; Kommentar
Betreff: Betreff: [pandas-dev / pandas] OSError beim Lesen einer Datei mit Akzenten im Dateipfad (# 15086)
Nein. Die Verwendung von fsdecode führt zu demselben Fehler, den wir ursprünglich hatten (error_msg.txt https://github.com/pandas-dev/pandas/files/1691837/error_msg.txt ).
- -
Sie erhalten dies, weil Sie kommentiert haben.
Antworten Sie direkt auf diese E-Mail, zeigen Sie sie auf GitHub https://github.com/pandas-dev/pandas/issues/15086#issuecomment-362818153 an oder schalten Sie den Thread https://github.com/notifications/unsubscribe-auth/ stumm.
Ich habe heute mit Steve Dower gesprochen und vermutet, dass dies die problematische Zeile ist: https://github.com/pandas-dev/pandas/blob/e8f206d8192b409bc39da1ba1b2c5bcd8b65cc9f/pandas/_libs/src/parser/io.c#L
IIUC, die Windows-Dateisystem-API erwartet, dass sich diese Bytes im MBCS befinden, aber wir verwenden utf-8.
Eine Problemumgehung auf Benutzerebene besteht darin, Ihren Dateinamen explizit als mbcs zu codieren, bevor Sie den Bytestring an Pandas übergeben. https://www.python.org/dev/peps/pep-0529/#explicitly -using-mbcs
pd.read_csv(filename.encode('mbcs'))
Kann jemand diese Problemumgehung testen?
Ich brauche nur eine kleine Änderung im Parser-Code, um dies zu beheben (es gab einen PR, der dies tat), wurde aber gelöscht
@ TomAugspurger , der nicht funktioniert. read_csv erwartet einen str
und keinen Wert von bytes
. Es scheitert mit
OSError: Expected file path name or file-like object, got <class 'bytes'> type
Danke für das Kontrollieren.
Am Freitag, den 20. April 2018 um 15:43 Uhr, João D. Ferreira [email protected]
schrieb:
@ TomAugspurger https://github.com/TomAugspurger , der nicht funktioniert.
read_csv erwartet einen str- und keinen bytewert. Es scheitert mitOSError: Erwarteter Dateipfadname oder dateiähnliches Objekt, erhalten
Art - -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/pandas-dev/pandas/issues/15086#issuecomment-383217062 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/ABQHIiOHyt3sT7B0pHJuY5lB-cJtT5JHks5tqkiEgaJpZM4LeTSB
.
Pingen Sie einfach an - ich habe das gleiche Problem, ich verwende eine Problemumgehung, aber es wäre großartig, wenn dies nicht erforderlich wäre.
Dies erfordert einen Community-Patch
Ich stoße auf dieses Problem. Ich möchte versuchen, einen Patchc beizusteuern. Gibt es Hinweise, wie Sie mit der Behebung dieses Problems beginnen können?
Ich denke, keiner der Betreuer hat Zugriff auf ein System, das dies reproduzieren kann.
Vielleicht können einige der anderen in dieser Ausgabe helfen, eine Lösung zusammenzustellen.
Hallo, ich habe dieses Problem bei Pandas 1.0.3
jetzt und sys._enablelegacywindowsfsencoding()
Workaround funktioniert nicht mehr. Ich habe ą
und ź
im Dateipfad.
Ich erhalte diesen Fehler auch bei Pandas 0.25.3
aber 0.23.4
scheint bei Verwendung der Problemumgehung einwandfrei zu funktionieren (ich habe andere Versionen nicht überprüft). Gerne stelle ich Ihnen weitere Informationen zur Verfügung.
Entfernen Sie die Datei aus demselben Ordnernamen wie, wenn Ihre Datei im selben Ordnernamen wie die Datei gespeichert ist.
Entfernen Sie einfach die Datei aus diesem Ordner.
Speichern Sie die Datei nicht im selben Ordnernamen.
dann funktioniert es
@pranjulknit Wenn ich verstehe, schlagen Sie vor, die Datei in einen Ordner ohne diese problematischen Zeichen im Pfad zu verschieben. Dies ist nicht immer möglich. Wenn Sie vorschlagen, dass Ordnernamen und Dateinamen unterschiedlich sein sollten - dies ist nicht das hier beschriebene Problem, ich hatte nie Probleme damit.
Eigentlich habe ich dieses Problem beim Lesen der CSV-Datei aus dem Jupiter-Notebook.
Hilfreichster Kommentar
Wenn jemand wie ich hierher kommt, weil er / sie das gleiche Problem hat, ist hier eine Lösung, bis pandas für die Arbeit mit pep 529 behoben ist (im Grunde führen alle Nicht-ASCII-Zeichen in Ihrem Pfad oder Dateiname zu Fehlern):
Fügen Sie die folgenden zwei Zeilen am Anfang Ihres Codes ein, um zur alten Methode der Behandlung von Pfaden in Windows zurückzukehren: