Use os.listdir to show directories only [duplicate]
Asked Answered
F

1

12

How can I bring python to only output directories via os.listdir, while specifying which directory to list via raw_input?

What I have:

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

Now this actually works if I input (via raw_input) the current working directory. However, if I put in anything else, the list returns empty. I tried to divide and conquer this problem but individually every code piece works as intended.

Fibrinolysin answered 24/8, 2017 at 21:11 Comment(2)
Could you share what you entered in the raw_input field and what OS you use?Sop
Just for the record since Jean-Francois solution worked: examples of what I entered: C:/, D:/X/Y, C:\, D:\X\Y, D:\\X\\Y OS: WindowsFibrinolysin
F
19

that's expected, since os.listdir only returns the names of the files/dirs, so objects are not found, unless you're running it in the current directory.

You have to join to scanned directory to compute the full path for it to work:

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

note the list comprehension version:

dirlist = [filename for filename in os.listdir(file_to_search) if os.path.isdir(os.path.join(file_to_search,filename))]
Fantasia answered 24/8, 2017 at 21:15 Comment(1)
Better use walk here see https://mcmap.net/q/126715/-how-to-list-only-top-level-directories-in-python dirlist = [d for d in next(os.walk(file_ro_search))[1]]Geisel

© 2022 - 2024 — McMap. All rights reserved.