Как пропустить недоступные папки с помощью os.listdir в python? - PullRequest
3 голосов
/ 06 сентября 2011

Я работаю с python и javascript, и у меня возникла проблема в определенной части моей программы. Мне нужно показать пользователю / клиенту содержимое определенного каталога. Я делаю это, используя os.listdir в python. Эта функция дает мне все содержимое каталога, даже недоступные папки (которые я не хочу показывать пользователю / клиенту).

Я тебе приведу пример. Исследуя каталог 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']

Я не могу получить доступ к некоторым из указанных папок. Например: данные приложения, файлы cookie, меню 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 голосов
/ 06 сентября 2011
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 голос
/ 06 сентября 2011
for myFile in myList():
    if not os.access(myFile, os.R_OK):
        myList.pop(myList.index(myFile))

Список должен включать только пути. Иначе, вам нужно изменить цикл в зависимости от атрибутов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...