2012-04-05 58 views
4
import os 
listing = os.listdir(path) 
for infile in listing: 
    print infile 
    f = open(os.path.join(path, infile), 'r') 

我在python中創建了一個腳本,它遍歷目錄中的所有文件並打開它們。它工作正常,問題出現在一些文件的名稱。該文件的名稱是Trade_Map _-_List_of_products_exported_by_Côte_d'Ivoire,但是當它試圖打開它,我不能讓這個錯誤使用python打開目錄中的文件,遇到編碼問題

IOError: [Errno 2] No such file or directory: "C:\\Users\\Borut\\Downloads\\GC downloads\\izvoz\\Trade_Map_-_List_of_products_exported_by_Co^te_d'Ivoire.txt"

實名具有Côte_d'Ivoire到底,而我的名字時得到我遍歷listdir最後有Co^te_d'Ivoire。哪裏不對??

回答

2

os.listdir(path)的編碼取決於字符串path的編碼。 如果path是unicode,那麼os.listdir(path)返回的條目列表將是unicode。否則,返回的列表將使用系統默認編碼。如果你想以確保輸出文件的列表正確,你可以嘗試以下的(未經測試):

import os 
import sys 

path = unicode(path, sys.getfilesystemencoding()) 

# All elements of listing will be in unicode. 
listing = os.listdir(path) 
for infile in listing: 
    print infile 

    # When infile is in unicode, the system to open 
    # the file using the correct encoding for the filename 
    f = open(os.path.join(path, infile), 'r') 

sys.getfilesystemencoding()是讓你的系統默認編碼的方法,這是多麼open等方法希望自己的字符串輸入(即使unicode也很好,因爲它們會自動將它們轉換爲默認編碼)。

參考:http://docs.python.org/howto/unicode.html#unicode-filenames