0

我试图列出目录中所有文件的名称和大小,但是当有中文文件时出现错误,我在 Windows 7 上使用 Python 2.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

我会尝试让你的根路径 unicode。我的猜测是 listdir 使用与初始字符串相同的编码,并且在读取非 ascii 字符时出错。

IE

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 回答