2011-01-28 14 views
1

Windows XPでPython 2.6.5を使用して、サイズを取得するためにos.statを呼び出してファイルのディレクトリを処理しています。このスクリプトは、特定のファイルに到達したときに失敗しています。そのファイルには、名前にASCII以外の文字が埋め込まれています。スローされる例外は、os.statが指定されたファイルを見つけることができなかったことです。 iTunesまたはVLC Media Playerで再生できるので、ファイルがあることがわかります。念のために文字が表示されていないos.statがファンキーな文字でファイルに添付されていません

問題のファイルの名前が

1-02 Só Danço Samba (Jazz Samba).m4a 

で、文字列が

'1-02 So\xb4 Danc\xb8o Samba (Jazz Samba).m4a' 

私がすべきものがあるかをやっている可能性があります名前がos.statに受け入れられるようにしますか? BTWは、Pythonでファイルを開こうとすると同じ理由で失敗します。

+1

を? –

答えて

1

Pythonファイルの先頭に行# coding=UTF-8を挿入してみてください(スクリプト内でUnicodeの違いがありますが、Philippが指摘しているように違います)。ファイル名をstrではなくunicodeとして保存してください。

は以下でテスト:

スクリプトからファイル名を取得ん
# coding=UTF-8 

import os 
fname = u'/temp/1-02 Só Danço Samba (Jazz Samba).m4a' 
print(os.stat(fname)) 
+1

最初のファイルは、ソースファイルにハードコードされたファイル名のみに役立ちます。第2の点がより重要です。すべてのファイル名とディレクトリ名にUnicode文字列を使用する必要があります(例えば、 'listdir'関数の引数として)。 – Philipp

+0

あなたはそうです、私はそれを試していたときのことを忘れてしまったのです。 –

+0

この名前は、ディレクトリツリーを通じてos.walkを実行することから来ています。文字列をUnicodeに変換するにはどうしたらいいですか?通常の文字列の代わりにユニコード文字列を使用するループを作成するにはどうすればよいですか? – sizzzzlerz

関連する問題