5

私は自分のプロジェクトを見て、開いているものを見つけてコマンドラインから私に返す簡単なヘルパーユーティリティを構築しようとしています。しかし、os.listdirへの私の呼び出しは、フォルダまたはファイル名が日本語であるときはいつも不器用なもの(例:'\x82\xa9\x82\xcc\x96I')を返し、その言葉にもう一度通じることはできません。すなわちos.listdir('C:\Documents and Settings\\x82\xa9\x82\xcc\x96I')はエラーを返します。Pythonで日本語の名前のディレクトリをトラバースする方法はありますか?

'WindowsError: [Error 3] 指定されたパスが見つかりません。' 

誰が、私はこれを回避する方法を知っていますか?どうもありがとう。

+1

指定されたパスが見つかりませんが、 "指定されたパスが見つかりません。" という意味します – Mikaveli

+0

ありがとう!実際、日本語を読んでも問題はありませんが、助けてくれてありがとう! – StormShadow

答えて

6

文字列をUnicodeにデコードし、UTF-8で再エンコードしてからos.listdirに渡す必要があります。だから、

On Windows NT/2k/XP and Unix, if path is a Unicode object, the result will be a list of Unicode objects. Undecodable filenames will still be returned as string objects.

>>> '\x82\xa9\x82\xcc\x96I'.decode('shift-jis').encode('utf-8') 
'\xe3\x81\x8b\xe3\x81\xae\xe8\x9c\x82' 
>>> print '\x82\xa9\x82\xcc\x96I'.decode('shift-jis') 
かの蜂 

代わりに最初の場所でそれからUnicode文字列を取得するにはos.listdirの次の機能を利用する、:あなたの日本語の文字列をシフトJISでエンコードされているように見えます:

os.listdir(ur'C:\Documents and Settings') 
# ---------^ 
+0

あなたは素晴らしいです。ありがとうございました。 – StormShadow

2

あなたは、Unicodeリテラル(u'your/path')としてディレクトリ名を渡すようにしてください。このように、結果はUnicode(これはおそらく日本語の文字を扱う必要があります)です。 documentationから

:。

On Windows NT/2k/XP and Unix, if path is a Unicode object, the result will be a list of Unicode objects. Undecodable filenames will still be returned as string objects.

関連する問題