2012-04-05 17 views
4
import os 
listing = os.listdir(path) 
for infile in listing: 
    print infile 
    f = open(os.path.join(path, infile), 'r') 

私は、ディレクトリ内のすべてのファイルを繰り返し処理するスクリプトをPythonで作成しています。問題は、いくつかのファイルの名前で発生します。ファイルの名前はTrade_Map _-_List_of_products_exported_by_Côte_d'Ivoireですが、それを開くためにその試みは、私は私が手名中にこのエラーPythonでディレクトリ内のファイルを開くとエンコードに問題が発生する

IOError: [Errno 2] No such file or directory: "C:\\Users\\Borut\\Downloads\\GC downloads\\izvoz\\Trade_Map_-_List_of_products_exported_by_Co^te_d'Ivoire.txt"

が本当の名前は、最後にCôte_d'Ivoireがあり得るカントとき私はlistdirを繰り返して、最後にCo^te_d'Ivoireを持っています。なにが問題ですか??

答えて

2

os.listdir(path)のエンコーディングは、文字列pathのエンコーディングによって異なります。 pathがユニコードの場合、os.listdir(path)によって返されるエントリのリストはユニコードになります。それ以外の場合、返されるリストはシステムのデフォルトエンコーディングを使用します。あなたは、ファイルのリストを正しく出力することを確認したい場合は、以下の(未テスト)を試みることができる:

import os 
import sys 

path = unicode(path, sys.getfilesystemencoding()) 

# All elements of listing will be in unicode. 
listing = os.listdir(path) 
for infile in listing: 
    print infile 

    # When infile is in unicode, the system to open 
    # the file using the correct encoding for the filename 
    f = open(os.path.join(path, infile), 'r') 

sys.getfilesystemencoding()openおよび他の方法は、彼らの期待するかは、あなたのシステムのデフォルトのエンコーディングを取得するための方法であります(たとえUnicodeが自動的にデフォルトのエンコーディングに変換されるので、Unicodeもうまくいきますが)

参考:http://docs.python.org/howto/unicode.html#unicode-filenames

関連する問題