Pedro Alves
Pedro Alves

Reputation: 1054

Python - Print all the directories except one

I have a python script that print all the directories from a main directory. What I want is to print all the directories expect the one that is old (that I include on exclude list).

For that I am using the following script:

include = 'C://Data//'
exclude = ['C:/Data//00_Old']

for root, dirs, files in os.walk(include, topdown=False):
    dirs[:] = [d for d in dirs if d not in exclude]
    for name in dirs:
        directory = os.path.join(root, name)
        print(directory)

Problem is: it is printing all the directories even the excluded one. What I am doing wrong?

Upvotes: 0

Views: 2203

Answers (2)

user12393567
user12393567

Reputation:

To simplify it even further, you can do:

from pathlib import Path

# I'm assuming this is where all your sub-folders are that you want to filter.
include = 'C://Data//' 
# You don't need the parent 'C://Data//' because you looping through the parent folder.
exclude = ['00_Old']

root_folder = Path(include)

for folder in root_folder.iterdir():
    if folder not in exclude:
        # do work

Upvotes: 2

abhilb
abhilb

Reputation: 5757

It is better to use the pathlib module for file system related requirements. I would suggest to try something like this.

from pathlib import Path

files = list(Path('C:/Data/').glob('**/*')) #recursively get all the file names
print([x for x in files if 'C:/Data/00_Old' not in str(x)])

Upvotes: 0

Related Questions