Unicodeファイル名のファイルを開くことができないようです。私がすることをしましょう:
for i in os.listdir():
open(i, 'r')
解決策を検索しようとすると、Unicodeの名前が付いたファイルfile()
やファイルを開く方法ではなく、Unicode文字列の読み取りと書き込みの方法に関するページが常に表示されますopen()
。
open()
ファイル名にUnicode文字列を渡すだけです。
Python 2.xの場合:
>>> open(u'someUnicodeFilenameλ')
<open file u'someUnicodeFilename\u03bb', mode 'r' at 0x7f1b97e70780>
Python 3.xでは、すべての文字列がUnicodeであるため、文字通り何もありません。
いつものように、ファイルを開く最良の方法は、常にwith
ステートメントを。と組み合わせて使用することであることに注意してくださいopen()
。
編集:アドバイスに関してはos.listdir()
、Python 2.xでは、次の点に注意する必要があります。
ファイル名を返すos.listdir()は、問題を引き起こします。Unicodeバージョンのファイル名を返す必要がありますか、それともエンコードされたバージョンを含む8ビット文字列を返す必要がありますか?os.listdir()は、ディレクトリパスを8ビット文字列として指定したかUnicode文字列として指定したかに応じて、両方を実行します。パスとしてUnicode文字列を渡すと、ファイルシステムのエンコーディングを使用してファイル名がデコードされ、Unicode文字列のリストが返されます。一方、8ビットパスを渡すと、ファイル名の8ビットバージョンが返されます。
つまり、Unicodeを出力したい場合は、Unicodeを次のように入力します。
>>> os.listdir(".")
['someUnicodeFilename\xce\xbb', 'old', 'Dropbox', 'gdrb']
>>> os.listdir(u".")
[u'someUnicodeFilename\u03bb', u'old', u'Dropbox', u'gdrb']
ファイルはどちらの方法でも開くことに注意してください。8ビットの文字列になるため、Python内では適切に表現されませんが、引き続き機能します。
open('someUnicodeFilename\xce\xbb')
<open file 'someUnicodeFilenameλ', mode 'r' at 0x7f1b97e70660>
3.xでは、いつものように、常にUnicodeです。
あなたはこれを試すことができます:
import os
import sys
for filename in os.listdir(u"/your-direcory-path/"):
open(filename.encode(sys.getfilesystemencoding()), "r")