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
パンダは、ファイルパスにアクセントが付いたファイルを読み取ろうとすると、OSErrorを返します。
問題は新しいです(Python3.6とPandas0.19.2にアップグレードしたので)
pd.show_versions()
出力コミット:なし
python:3.6.0.final.0
python-ビット:64
OS:Windows
OSリリース:7
マシン:AMD64
プロセッサー:Intel64ファミリー6モデル94ステッピング3、GenuineIntel
バイトオーダー:少し
LC_ALL:なし
言語:fr
ローカル:なし。なし
パンダ:0.19.2
鼻:なし
ピップ:9.0.1
setuptools:32.3.1
Cython:0.25.2
numpy:1.11.3
scipy:0.18.1
statsmodels:なし
xarray:なし
IPython:5.1.0
スフィンクス:1.5.1
patsy:なし
dateutil:2.6.0
pytz:2016.10
blosc:なし
ボトルネック:1.2.0
テーブル:なし
numexpr:2.6.1
matplotlib:1.5.3
openpyxl:なし
xlrd:なし
xlwt:なし
xlsxwriter:なし
lxml:なし
bs4:なし
html5lib:0.999999999
httplib2:なし
apiclient:なし
sqlalchemy:1.1.4
pymysql:なし
psycopg2:なし
jinja2:2.9.3
boto:なし
pandas_datareader:なし
ちょうど私のペニーの価値があります。 MacOSXとUbuntuですぐに試してみました
問題。 下記参照。
これは環境/プラットフォームの問題でしょうか? LOCALE
が
None.None
ます。 残念ながら、これを試すためのWindowsマシンがありません
の例。 確かに、これはあなたが後にこれを見た理由を説明しません
python3.6とpandas0.19.2にアップグレードします。
注:python3.6でvirtualenvをセットアップし、pipを使用してpandas0.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()の出力
インストールされたバージョン
コミット:なし
python:3.6.0.final.0
python-ビット:64
OS:Linux
OS-リリース:4.4.0-57-generic
マシン:x86_64
プロセッサー:x86_64
バイトオーダー:少し
LC_ALL:なし
言語:en_GB.UTF-8
ロケール:en_GB.UTF-8
パンダ:0.19.2
鼻:なし
ピップ:9.0.1
setuptools:32.3.1
Cython:なし
numpy:1.11.3
scipy:なし
statsmodels:なし
xarray:なし
IPython:なし
スフィンクス:なし
patsy:なし
dateutil:2.6.0
pytz:2016.10
blosc:なし
ボトルネック:なし
テーブル:なし
numexpr:なし
matplotlib:なし
openpyxl:なし
xlrd:なし
xlwt:なし
xlsxwriter:なし
lxml:なし
bs4:なし
html5lib:なし
httplib2:なし
apiclient:なし
sqlalchemy:なし
pymysql:なし
psycopg2:なし
jinja2:なし
boto:なし
pandas_datareader:なし
3.6は、Windowsのファイルシステムエンコーディングを(asciiから)utf8に切り替えると思います。 それを除けば、3.6のWindowsではまだテストを有効にしていません(必要なパッケージのいくつかがちょうど今利用可能になっているため)。
@JGoutin
だから私は3.6のappveyor(windows)にビルドサポートを追加したので、テストをプッシュしてそれが機能するかどうかを確認するのであれば、素晴らしいでしょう。
プログラムがpd.read_csv(file_path)で停止したときにも、同じ問題に直面しました。 Pythonを3.6にアップグレードした後の状況は私と似ています(最後にインストールしたPythonが正確にどのバージョンか、おそらく3.5 ......かどうかはわかりません)。
@jrebackここでの修正に向けた次のステップは何ですか?
あなたは「吹き飛ばされた」PRについて言及しました-それはどういう意味ですか?
私はWindowsを使用していませんが、手助けを試みることができます(Windowsでは明らかに機能しないコードの一部をデバッグするためのVMを入手しただけです)
ところで、回避策:名前の代わりにファイルハンドルを渡すpd.read_csv(open('test_é.txt', 'r'))
(関連する問題にはいくつかの回避策がありますが、私はこれを見ていません)
@tpietruszka PRに関するコメントを参照してください: //github.com/pandas-dev/pandas/pull/15092 (プライベートフォークから削除され、ほとんどそこにありました)。
基本的に、wnidowsのpy3.6(他のpythonと比較して)ではパスを異なる方法でエンコードする必要があります。 基本的に実装する必要があります: 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で動作するように修正されるまでの解決策があります(基本的に、非ASCII文字がパスに含まれるかファイル名がエラーになります):
コードの先頭に次の2行を挿入して、Windowsでパスを処理する古い方法に戻します。
import sys
sys._enablelegacywindowsfsencoding()
上記のソリューションを使用すると、機能します。 どうもありがとう
ただし、DataFrame.to_csv()で同じ問題が発生しない理由についてはまだ混乱しています。 つまり、Unicodeファイルパスの場合、書き込みは問題ありませんが、読み取りは問題ありません。
path = os.path.join( 'E:\语料'、 'sina.csv')
pd.read_csv(open(path、 'r'、encoding = 'utf8'))
成功です。
影響を受けるシステムを持つ誰かがこの行を変更するかどうかを確認できますか
に
return _expand_user(os.fsencode(filepath_or_buffer)), None, compression
それを修正しますか?
いいえ、違います。
結果:OSError:予期されたファイルパス名またはファイルのようなオブジェクト、取得
(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]
送信:2018年2月3日土曜日8:00:13 AM
宛先:pandas-dev / pandas
Cc:Tom Augspurger; コメント
件名:Re:[pandas-dev / pandas]ファイルパスにアクセント付きのファイルを読み取るときのOSError(#15086)
いいえ、違います。
結果:OSError:予期されたファイルパス名またはファイルのようなオブジェクト、取得
—
あなたがコメントしたのであなたはこれを受け取っています。
このメールに直接返信するか、GitHub https://github.com/pandas-dev/pandas/issues/15086#issuecomment-362809602で表示するか、スレッドhttps://github.com/notifications/unsubscribe-auth/をミュートします
いいえ。fsdecodeを使用すると、最初に発生したのと同じエラーが発生します( error_msg.txt )
試していただきありがとうございます。
投稿者:Fotis Jannidis [email protected]
送信:2018年2月3日土曜日8:57:07 AM
宛先:pandas-dev / pandas
Cc:Tom Augspurger; コメント
件名:Re:[pandas-dev / pandas]ファイルパスにアクセント付きのファイルを読み取るときのOSError(#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/をミュートします
今日SteveDowerと話をしましたが、これが問題のある行である可能性があると彼は考えています: //github.com/pandas-dev/pandas/blob/e8f206d8192b409bc39da1ba1b2c5bcd8b65cc9f/pandas/_libs/src/parser/io.c#L30
IIUC、WindowsファイルシステムAPIは、これらのバイトがMBCSにあることを想定していますが、utf-8を使用しています。
ユーザーレベルの回避策は、バイト文字列をpandasに渡す前に、ファイル名をmbcsとして明示的にエンコードすることです。 https://www.python.org/dev/peps/pep-0529/#explicitly -using-mbcs
pd.read_csv(filename.encode('mbcs'))
誰かがその回避策をテストすることができますか?
これを修正するには、パーサーコードを少し変更する必要があります(これを行うPRがありました)が、削除されました
動作しないstr
bytes
値ではなく、 str
を想定しています。 それは失敗します
OSError: Expected file path name or file-like object, got <class 'bytes'> type
確認していただきありがとうございます。
15:43時金、2018年4月20日には、ジョアン・フェレイラD. [email protected]
書きました:
@TomAugspurgerhttps ://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
。
これにpingを送信するだけです-同じ問題があります。回避策を使用していますが、それが不要な場合はすばらしいでしょう。
これにはコミュニティパッチが必要です
この問題が発生しています。 patchcを試して貢献したいこれを修正し始める方法についてのポインタはありますか?
これを再現できるシステムにアクセスできるメンテナはいないと思います。
おそらく、この問題の他のいくつかは、解決策をまとめるのに役立つ可能性があります。
こんにちは、パンダ1.0.3
この問題が発生し、 sys._enablelegacywindowsfsencoding()
回避策が機能しなくなりました。 ファイルパスにą
とź
があります。
パンダ0.25.3
でもこのエラーが発生しますが、回避策を使用すると0.23.4
が正常に機能しているようです(他のバージョンは確認していません)。 追加情報を提供させていただきます。
ファイルがファイルと同じフォルダ名に保存されている場合は、のように同じフォルダ名からファイルを削除します。
そのフォルダからファイルを削除するだけです。
同じフォルダ名にファイルを保存しないでください。
その後、それは動作します
@pranjulknit理解
実際、jupyterノートブックからcsvファイルを読み取っているときにこの問題が発生します。
最も参考になるコメント
同じ問題が発生したために誰かが私のようにここに来た場合、パンダがpep 529で動作するように修正されるまでの解決策があります(基本的に、非ASCII文字がパスに含まれるかファイル名がエラーになります):
コードの先頭に次の2行を挿入して、Windowsでパスを処理する古い方法に戻します。