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ですが、ファイルを開こうとすると、このエラーが発生します。

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があります。なにが問題ですか??

4

1 に答える 1

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でも、自動的にデフォルトエンコーディングに変換されるため、問題ありません)。

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

于 2012-04-05T13:12:43.193 に答える