如何使用Python的os.listdir跳过无法访问的文件夹?

3

我正在使用Python和JavaScript,我的程序的一个具体部分存在问题。我需要向用户/客户端显示特定目录的内容。我使用Python的os.listdir来实现此目的。该函数会给我返回目录中的所有内容,包括不可访问的文件夹(这些我不希望向用户/客户端显示)。

我将举个例子,在浏览C:\Users\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/*.*'

所以我的问题是,我如何检测无法访问的文件夹并跳过它们,只向用户显示他可以浏览的文件夹?
2个回答

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  

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

列表应仅包含路径。否则,您需要根据属性修改循环。

那真的是我一直希望找到的解决方案。然而,os.access 返回的结果对于所有文件夹都为 True,即使它们是不可访问的... - Neuza
它适用于Ubuntu 10.04,可能也适用于大多数Linux发行版。尝试使用os.W_OK,这是写入权限;如果这也不起作用,您需要使用file()os.listdir()创建一个try-except循环,并使用IOErrorOSError异常。实际上它会比那慢得多。基本上,您将要打开文件并列出目录,如果捕获到任何错误,则从数组中弹出。 - Umur Kontacı
好的,这可能是Windows的问题。我将使用try-except循环,虽然它会慢一些,但它可以解决问题...谢谢! - Neuza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接