2013-08-22 81 views
0

我正在使用python,並且在文件名包含非ASCII字符時讀取文件的屬性時遇到了一些麻煩。獲取名稱包含特殊(非ASCII)字符的文件的屬性

一個用於例子中的文件被命名爲:

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' 

我承擔其造成的由特殊的字符,因爲代碼工作正常與其他文件名只有ASCI我的字符。

有誰知道一種方法來查詢這樣的文件的文件系統屬性?

回答

1

如果這是python 2.x,它的一個編碼問題。如果您將一個unicode字符串傳遞給os.listdir(例如u'C:\\my\\pathname'),它將返回unicode字符串,並且它們應該具有正確編碼的非ascii字符。請參閱文檔中的Unicode Filenames

引述商務部:

os.listdir(), which returns filenames, raises an issue: should it return the Unicode version of filenames, or should it return 8-bit strings containing the encoded versions? os.listdir() will do both, depending on whether you provided the directory path as an 8-bit string or a Unicode string. If you pass a Unicode string as the path, filenames will be decoded using the filesystem’s encoding and a list of Unicode strings will be returned, while passing an 8-bit path will return the 8-bit versions of the filenames. For example, assuming the default filesystem encoding is UTF-8, running the following program:

此代碼應工作...

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)) 
+0

感謝您的幫助。它似乎已經解決了這個問題。如果我現在打印文件名稱,它包括特殊字符,而在它之前用問號替換它們。它現在反而說:WindowsError:[錯誤2]系統找不到指定的文件:.即使它剛剛從listdir函數中收集它。我真的不知道最終得出結論。再次感謝您的幫助 – Xtrato

+0

listdir爲您提供了相對路徑名,您還需要os.path.join() - 我會更新該帖子。我在我的機器上試過了你的文件名,它工作,所以你必須靠近。 – tdelaney

0

正如你在Windows下你應該ntpath模塊,而不是os.path中

​​

我嘗試過,沒有我無法測試它的窗口。每個操作系統都有不同的路徑約定,因此,Python爲最常見的操作系統提供了一個特定的模塊。

+1

沒有,os.path中僅僅是一個別名平臺的特定版本。在Windows上,os.path是ntpath。 – tdelaney

+0

感謝您的更正。這說得通。 – moliware

相關問題