2012-07-03 52 views
0

我試圖列出目錄中的名稱和所有文件的大小,但得到一個錯誤,當有中國的文件,我使用的Python 2.7在Windows 7上清單中國名目錄與Python

這是我的代碼

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

的文件的名稱

我該如何避免這個問題?

在此先感謝

回答

2

我會嘗試使您的根路徑unicode。我的猜測是,listdir使用與初始字符串相同的編碼,並在讀取非ascii字符時出錯。

path = u'\' 

來源: http://docs.python.org/library/os.html#os.listdir

「改變在2.3版本:在Windows NT/2K/XP和Unix上,如果path是一個Unicode對象,結果將是列表Unicode對象。不可解碼的文件名仍將作爲字符串對象返回。「

+0

謝謝,那正是我需要的。我添加了infileutf = infile.encode(「utf-8」),它現在可以工作 – Jon