2011-09-06 28 views
3

我正在使用python和javascript,並在我的程序的特定部分出現問題。我需要向用戶/客戶端顯示特定目錄的內容。我使用python的os.listdir來做到這一點。這個功能給我所有的目錄內容,甚至是不可訪問的文件夾(我不想顯示用戶/客戶端)。如何用python的os.listdir跳過不可訪問的文件夾?

我給你舉個例子。在探索目錄C:\用戶\ MYUSER,我通過os.listdir得到這樣的:

In [18]: os.listdir('C:\Users\MyUser') 

Out[18]: ['.eclipse', '.gimp-2.6', '.hdfview2.7', '.matplotlib', '.pylint.d', '.recently-used.xbel', '.xy', 'AppData', 'Application Data', 'Aptana Rubles', 'Contacts', 'Cookies', 'Defini\xe7\xf5es locais', 'Desktop', 'Documents', 'Downloads', 'Dropbox', 'Favorites', 'InstallAnywhere', 'Links', 'Menu Iniciar', 'Modelos', 'Music', 'My Documents', 'NetHood', 'OpenSignals Files', 'Os meus documentos', 'Pictures', 'PrintHood', 'Recent', 'Saved Games', 'SciTE.session', 'Searches', 'SendTo', 'Thumbs.db', 'Tracing', 'Videos', 'workspace', '_ipython'] 

我無法訪問某些指定的文件夾中。例如:應用程序數據,Cookies,Menu Iniciar(葡萄牙語開始菜單),Modelos,Os meus Documentos(我的文檔用於葡萄牙語),NetHood,PrintHood和SendTo。如果我嘗試用Python來訪問它們,我得到這個錯誤:

WindowsError    Traceback (most recent call last) 

C:\Users\Plux\<ipython console> in <module>() 

WindowsError: [Error 5] Denied Access: 'C:\\Users\\Plux\\Cookies/*.*' 

所以,我的問題是,我怎麼能檢測到人跡罕至的文件夾,並將跳過,只顯示用戶自己可以探索的文件夾?

回答

3
for el in os.listdir('C:\Users\MyUser'): 
    try: 
     (check if you can open, if so, you can show this folder) 
    except WindowsError: 
     pass 
+0

謝謝,我會這樣做。 :) – Neuza

1
for myFile in myList(): 
    if not os.access(myFile, os.R_OK): 
     myList.pop(myList.index(myFile)) 

名單應該只包括路徑。否則,您需要根據屬性修改循環。

+0

這真的是我希望找到的解決方案。然而,對於所有文件夾,os.access的結果是True,即使它們不可訪問... – Neuza

+0

它適用於Ubuntu 10.04以及大多數Linux發行版。試試'os.W_OK'這是寫權限;如果這不起作用,則需要用'file()'和'os.listdir()'創建一個帶有'IOError'和'OSError'異常的try-except循環。它實際上會比這慢得多。基本上你會想要打開文件和listdir目錄,如果你發現任何錯誤,從數組中彈出。 –

+0

好的,這可能是Windows的一個問題。我將使用try-except循環,即使速度稍慢,也可以工作......謝謝! – Neuza

相關問題