4

このトピックに関する決定的なガイドと思われるものを含め、このトピックについてはすでにかなりの量を読みました: http://docs.python.org/howto/unicode.html

より経験豊富な開発者にとっては、このガイドで十分かもしれません。ただし、私の場合は、開始時よりも混乱しており、まだ問題が解決していません。

os.walk() を使用してファイル名を読み取り、ファイルに関する特定の情報 (ファイルサイズなど) を取得してから、その情報をテキスト ファイルに書き込もうとしています。これは、ファイル名が utf でエンコードされたファイルに遭遇しない限り機能します。utf でエンコードされた名前のファイルにヒットすると、次のようなエラーが発生します。

WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect: 'Documents\\??.txt'

その場合、ファイルの名前は唽咿.txt でした。

これが私がこれまでにやろうとしてきた方法です:

for (root, dirs, files) in os.walk(dirpath):
        for filename in files:
            filepath = os.path.join(root, filename)
            filesize = os.stat(filepath).st_size
            file = open(filepath, 'rb')
            stuff = get_stuff(filesize, file)
            file.close()

重要な場合、dirpath は、'dirpath = raw_input()' に相当するコードの初期部分に由来します。

ファイルパス行を次のように変更するなど、さまざまなことを試しました。

filepath = unicode(os.path.join(unicode(root), unicode(filename)))

しかし、私が試したことは何もありません。

ここに私の2つの質問があります:

  1. 正しいファイル名を os.stat() メソッドに渡して正しい応答を得るにはどうすればよいですか?

  2. 私のスクリプトは、いくつかのファイル名をテキスト ファイルに書き込む必要があり、後で読み取ることができます。その時点で、テキスト ファイルから読み取った内容に基づいてファイルを検索できる必要があります。このようなファイル名をテキスト ファイルに適切に書き込み、後で適切に読み取るにはどうすればよいですか?

4

2 に答える 2

2

にパスunicodeを渡しますos.walk()

バージョン2.3で変更: Windows NT / 2k / XPおよびUnixで、パスがUnicodeオブジェクトの場合、結果はUnicodeオブジェクトのリストになります。

ソース

于 2012-07-18T16:05:15.557 に答える
2

完全なソリューションに関心のある方:

dirpath = raw_input()

に変更されました:

dirpath = raw_input().decode(sys.stdin.encoding)

これにより、os.walk() に渡される引数を Unicode にすることができ、返されるファイル名も Unicode になりました。

これらをファイルに書き込んだり、ファイルから書き込んだりするために (私の 2 番目の質問)、 codecs.open() 機能を使用しました

于 2012-07-18T18:53:07.100 に答える