2017-09-10 19 views
2

私はPythonとQT GUIを使ってアプリケーションを開発しています。 ファイルをDataFrameにインポートする必要があります。 pandas.read_csvメソッドで開くには、パスとファイル名を取得するのにQFileDialog.getOpenFileNameを使用します。 「ó」のような特殊文字を含むパスを取得するまでは、すべてうまく動作します。 pandas.read_csvは動作せず、アプリケーションがクラッシュします。pandas.read_csvはアクセント記号付きファイルをインポートできません

私はコンソールでエラーを再現し、以下の結果を持ってしてみてください:

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 

show_versions()の出力は次のとおりです。私はこの記事で読んで

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 

Encoding with pandas.read_csv when file name has accents問題がで修正されましたパンダ0.14.0。

この問題を解決するための推奨事項はありますか?

+0

は試してみてくださいpandas.read_csvにファイルポインタを渡し多分 'pd.read_csv(パス1、delim_whitespace =真、DTYPE =オブジェクト、エンコーディング=」 utf-8 ') 'または他のリスト:https://docs.python.org/3/library/codecs.html#standard-encodings – Protostome

+0

[この問題](https:// github .com/pandas-dev/pandas/issues/15086) – MaxU

+1

@Protostome、ご回答ありがとうございます。私は試しましたが動作しません。 read_csvのエンコーディングオプションはファイルの内容であり、ファイルへのパスではないからだと思います。ファイルは問題なくインポートされますが、ファイルのパスに特殊文字があると問題が発生します – jmejias

答えて

0

あなたはUTF-8エンコーディングを読む前に、あなたのノートブック/ ipythonのコードのこれらの行を試すことができます:あなたのファイルを読み込むときにコメント

pd.read_csv(path1, delim_whitespace=True, dtype=object,encoding='utf-8') 
に提案するよう、これらのラインを使用し、その後

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

+0

こんにちは@Espoir。私はこのコマンドを試しましたが、なぜこのコマンドがPython 2用であるのか探していません。 Python 3では、デフォルトのエンコーディングは 'utf-8'で、setdefaultencoding()メソッドはsysモジュールから削除されました。 Python> = 3.4でreload(sys)を使用するには、次の例に従います。https://stackoverflow.com/questions/961162/reloading-module-giving-nameerror-name-reload-is-not-defined – jmejias

1

深く見ると、この動作はWindowsシステムでのみPython 3.6とpandas.read_csvの組み合わせになります。

「mbcs」から「UTF-8」へのWindowsファイルシステムエンコーディングの変更。 Python PEP 529を参照してください。

1.-前のPython <と作品へのすべてのアプリを変更するには、このコードを使用= 3.5エンコーディング(「MBCSを」):私はこの周りにいくつかのソリューションを取得し、現在のファイルシステムエンコーディング

を取得するにはsys.getfilesystemencoding()を使用して、

import sys 
sys._enablelegacywindowsfsencoding() 

2.-

with open(path2, 'r') as fp: 
    df2 = pd.read_csv(fp, delim_whitespace=True, dtype=object) 
関連する問題