2017-09-10 1 views
2

파이썬 및 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. 이 명령을 시도했지만 작동하지 않습니다. 왜이 명령이 파이썬 2 용인지 알 수 없었습니다. 파이썬 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 시스템에서만 파이썬 3.6과 pandas.read_csv의 조합으로 제공됩니다.

파이썬 3.6은 "mbcs"에서 "UTF-8"로 Windows 파일 시스템 인코딩을 변경합니다. Python PEP 529을 참조하십시오. 나는이 문제를 몇 가지 솔루션을 얻을 인코딩을 현재 파일 시스템을

를 얻을 수 sys.getfilesystemencoding()를 사용

1 .- 사용이 코드는 이전에 파이썬 < = 3.5 인코딩 작업에 모든 응용 프로그램을 변경 ("MBCS")

import sys 
sys._enablelegacywindowsfsencoding() 

2 .-

with open(path2, 'r') as fp: 
    df2 = pd.read_csv(fp, delim_whitespace=True, dtype=object) 
관련 문제