0

ディレクトリ内のすべてのファイルの名前とサイズを一覧表示しようとしていますが、中国語のファイルがあるとエラーが発生します。Windows7でPython2.7を使用しています。

これは私のコードです

import os

path = '\'
listing = os.listdir(path)
for infile in listing:
    if infile.endswith(".csv"):
        print infile + ";"+ str(os.path.getsize(path + infile))

これは私が得るエラーです

Traceback (most recent call last):
  File "file_size.py", line 8, in <module>
    print infile + ";"+ str(os.path.getsize(path + infile))
  File "C:\Python27\lib\genericpath.py", line 49, in getsize
    return os.stat(filename).st_size
WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect: '\DB?1333366331.436754.048342.csv'

C:\>python file_size.py
  File "file_size.py", line 7
    if infile.endswith(".csv"):
                              ^
IndentationError: unindent does not match any outer indentation level

エラーの原因となったファイルの名前はDB表1333366331.436754.048342.csvです。

この問題を回避するにはどうすればよいですか?

前もって感謝します

4

1 に答える 1

2

ルートパスをユニコードにしてみます。私の推測では、listdirは最初の文字列と同じエンコーディングを使用しており、ASCII以外の文字を読み取るときにエラーが発生します。

すなわち

path = u'\'

ソース: http ://docs.python.org/library/os.html#os.listdir

「バージョン2.3で変更:Windows NT / 2k / XPおよびUnixでは、パスがUnicodeオブジェクトの場合、結果はUnicodeオブジェクトのリストになります。デコードできないファイル名は引き続き文字列オブジェクトとして返されます。」

于 2012-07-06T07:09:36.013 に答える