2017-09-10 3 views
2

nicht importieren Ich entwickle eine Anwendung mit Python und einem QT GUI. Ich muss eine Datei in eine DataFrame importieren. Ich benutze eine QFileDialog.getOpenFileName, um den Pfad und Dateinamen zu erhalten, um es mit pandas.read_csv Methode zu öffnen. Alles funktioniert gut, bis ich einen Pfad mit Sonderzeichen wie "ó" bekomme. Die pandas.read_csv funktioniert nicht und stürzt die App ab.pandas.read_csv kann Datei mit Akzentmarkierung im Pfad

Ich versuche, die Fehler in der Konsole und haben die folgenden Ergebnisse zu reproduzieren:

In[2]: import pandas as pd 
Backend Qt5Agg is interactive backend. Turning interactive mode on. 

In[3]: path1 = 'F:/Software_Proyects/Python/Proyectos/test_read_csv/FlowData.txt' 
In[4]: df1 = pd.read_csv(path1, delim_whitespace=True, dtype=object) 

In[5]: path2 = 'F:/Software_Proyects/Python/Proyectos/test_read_csv_with_ó/FlowData.txt' 
In[6]: df2 = pd.read_csv(path2, delim_whitespace=True, dtype=object) 
Traceback (most recent call last): 
    File "C:\Program Files (x86)\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-feba8e024d43>", line 1, in <module> 
    df2 = pd.read_csv(path2, delim_whitespace=True, dtype=object) 
    File "C:\Program Files (x86)\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 646, in parser_f 
    return _read(filepath_or_buffer, kwds) 
    File "C:\Program Files (x86)\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 389, in _read 
    parser = TextFileReader(filepath_or_buffer, **kwds) 
    File "C:\Program Files (x86)\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 730, in __init__ 
    self._make_engine(self.engine) 
    File "C:\Program Files (x86)\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 923, in _make_engine 
    self._engine = CParserWrapper(self.f, **self.options) 
    File "C:\Program Files (x86)\Anaconda3\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 

die Ausgabe von show_versions() ist:

In[7]: pd.show_versions() 

INSTALLED VERSIONS 
------------------ 
commit: None 
python: 3.6.0.final.0 
python-bits: 32 
OS: Windows 
OS-release: 10 
machine: AMD64 
processor: Intel64 Family 6 Model 78 Stepping 3, GenuineIntel 
byteorder: little 
LC_ALL: None 
LANG: None 
LOCALE: None.None 

pandas: 0.19.2 
nose: 1.3.7 
pip: 9.0.1 
setuptools: 27.2.0 
Cython: 0.25.2 
numpy: 1.11.3 
scipy: 0.18.1 
statsmodels: 0.6.1 
xarray: None 
IPython: 5.1.0 
sphinx: 1.5.1 
patsy: 0.4.1 
dateutil: 2.6.0 
pytz: 2016.10 
blosc: None 
bottleneck: 1.2.0 
tables: 3.2.2 
numexpr: 2.6.1 
matplotlib: 2.0.0 
openpyxl: 2.4.1 
xlrd: 1.0.0 
xlwt: 1.2.0 
xlsxwriter: 0.9.6 
lxml: 3.7.2 
bs4: 4.5.3 
html5lib: None 
httplib2: None 
apiclient: None 
sqlalchemy: 1.1.5 
pymysql: None 
psycopg2: None 
jinja2: 2.9.4 
boto: 2.45.0 
pandas_datareader: None 

Wie ich in diesem Beitrag Encoding with pandas.read_csv when file name has accents das Problem gelesen wurde behoben in Pandas 0.14.0.

Irgendwelche Empfehlungen, um dieses Problem zu lösen?

+0

Versuchen vielleicht 'pd.read_csv (path1, delim_whitespace = True, dtype = Objekt, encoding =‘ utf-8 ') 'oder eine andere aus dieser Liste: https://docs.python.org/3/library/codecs.html#standard-encodings – Protostome

+0

möchten Sie vielleicht [dieses Problem] (https: // github .com/pandas-dev/pandas/issues/15086) – MaxU

+1

@Protostome, danke für deine Antwort, ich habe es versucht, aber es funktioniert nicht. Ich denke, weil die Kodierungsoption von read_csv für Dateiinhalt und nicht für den Pfad zur Datei ist. Die Datei wird ohne Probleme importiert, das Problem tritt auf, wenn der Pfad der Datei Sonderzeichen hat – jmejias

Antwort

0

können Sie diese Zeilen Code in Ihrem Notebook/ipython versuchen, bevor mit utf-8-Kodierung zu lesen:

import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 

und dann, wenn Sie Ihre Datei jene Zeilen zu lesen, wie im Kommentar vorschlägt

pd.read_csv(path1, delim_whitespace=True, dtype=object,encoding='utf-8') 
+0

Hallo @Espoir. Ich habe versucht, diese Befehle, aber es funktioniert nicht, suchen, warum ich fand diese Befehle für Python 2 ist. In Python 3 ist die Standardcodierung 'UTF-8' und die Methode Setdefaultencoding() wurde von sys-Modul gelöscht. Um reload (sys) auf Python> = 3.4 zu verwenden, folgen Sie diesem Beispiel: https: //stackoverflow.com/questions/961162/reloading-module-giving-nameerror-name-reload-is-not-defined – jmejias

1

Dieses tiefgreifende Verhalten kommt in einer Kombination von Python 3.6 und pandas.read_csv nur in Windows-Systemen vor.

Python 3.6 ändern Windows-Dateisystemcodierung von "mbcs" zu "UTF-8". Siehe Python PEP 529. Verwenden Sie sys.getfilesystemencoding() das aktuelle Dateisystem zu erhalten Codierung

ich einige Lösungen, um dieses:

1.- Mit diesem Code ändern alle die App funktioniert mit dem Stand der Python < = 3.5-Codierung („MBCS“)

import sys 
sys._enablelegacywindowsfsencoding() 

2.- Geben Sie einen Dateizeiger auf den pandas.read_csv

with open(path2, 'r') as fp: 
    df2 = pd.read_csv(fp, delim_whitespace=True, dtype=object) 
Verwandte Themen