Используйте os.listdir для отображения только каталогов

Как я могу перенести python только в выходные каталоги через os.listdir, указав, какой каталог отображать через raw_input?

Что у меня есть:

file_to_search = raw_input("which file to search?\n>")

dirlist=[]

for filename in os.listdir(file_to_search):
    if os.path.isdir(filename) == True:
        dirlist.append(filename)

print dirlist

Теперь это действительно работает, если я ввожу (через raw_input) текущий рабочий каталог. Однако, если я добавлю что-нибудь еще, список вернется пустым. Я пытался разделить и преодолеть эту проблему, но индивидуально каждый фрагмент кода работает так, как задумано.


person Felix    schedule 24.08.2017    source источник
comment
Не могли бы вы поделиться тем, что вы ввели в поле raw_input и какую ОС вы используете?   -  person MSeifert    schedule 25.08.2017
comment
Просто для записи, поскольку решение Жана-Франсуа сработало: примеры того, что я ввел: C: /, D: / X / Y, C: \, D: \ X \ Y, D: \\ X \\ Y OS: Windows   -  person Felix    schedule 25.08.2017


Ответы (1)


этого и следовало ожидать, поскольку os.listdir возвращает только имена файлов / каталогов, поэтому объекты не обнаруживаются, если вы не запускаете его в текущем каталоге.

Вы должны join сканировать каталог, чтобы вычислить полный путь, чтобы он заработал:

for filename in os.listdir(file_to_search):
    if os.path.isdir(os.path.join(file_to_search,filename)):
        dirlist.append(filename)

обратите внимание на версию понимания списка:

dirlist = [filename for filename in os.listdir(file_to_search) if os.path.isdir(os.path.join(file_to_search,filename))]
person Jean-François Fabre    schedule 24.08.2017