0

ファイル名に非ASCII文字が含まれている場合、Pythonを使用していますが、ファイルのプロパティを読み取るのに問題があります。

たとえば、ファイルの 1 つの名前は次のとおりです。

0-Channel-https∺∯∯services.apps.microsoft.com∯browse∯6.2.9200-1∯615∯Channel.dat

これを実行すると:

list2 = os.listdir('C:\\Users\\James\\AppData\\Local\\Microsoft\\Windows Store\\Cache Medium IL\\0\\')
for data in list2:
    print os.path.getmtime(data) + '\n'

エラーが発生します:

WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect: '0-Channel-https???services.apps.microsoft.com?browse?6.2.9200-1?615?Channel.dat'

コードはASCII文字のみの他のファイル名で正常に動作するため、特殊文字が原因であると想定しています。

このような名前のファイルのファイルシステム プロパティを照会する方法を知っている人はいますか?

4

2 に答える 2

1

これが python 2.x の場合、エンコーディングの問題です。のような os.listdir に Unicode 文字列を渡すと、Unicode 文字列が返されu'C:\\my\\pathname'、ASCII 以外の文字が正しくエンコードされているはずです。ドキュメントのUnicode ファイル名を参照してください。

ドキュメントの引用:

ファイル名を返す os.listdir() は問題を引き起こします: ファイル名の Unicode バージョンを返す必要がありますか、それともエンコードされたバージョンを含む 8 ビット文字列を返す必要がありますか? os.listdir() は、ディレクトリ パスを 8 ビット文字列または Unicode 文字列のどちらで指定したかに応じて、両方を実行します。Unicode 文字列をパスとして渡すと、ファイル システムのエンコーディングを使用してファイル名がデコードされ、Unicode 文字列のリストが返されます。一方、8 ビット パスを渡すと、ファイル名の 8 ビット バージョンが返されます。たとえば、デフォルトのファイルシステムのエンコーディングが UTF-8 であるとすると、次のプログラムを実行します。

このコードは動作するはずです...

directory_name = u'C:\\Users\\James\\AppData\\Local\\Microsoft\\Windows Store\\Cache Medium IL\\0\\'
list2 = os.listdir(directory_name)
for data in list2:
    print data, os.path.getmtime(os.path.join(directory_name, data))
于 2013-08-22T19:53:21.300 に答える
0

Windows を使用しているため、os.path の代わりに ntpath モジュールを試してください。

from ntpath import getmtime

ウィンドウがないため、テストできません。すべての OS には異なるパス規則があるため、Python は最も一般的なオペレーティング システム用に特定のモジュールを提供します。

于 2013-08-22T19:43:07.687 に答える