7

I know how to delete single files, however I am lost in my implementation of how to delete all files in a directory of one type.

Say the directory is \myfolder

I want to delete all files that are .config files, but nothing to the other ones. How would I do this?

Thanks Kindly

5
  • Did you mean you want to delete all files that are .config? Commented Jun 13, 2009 at 19:07
  • do you want to delete all .config files under a certain path? if you just want to delete a .config file, then you can just do os.remove(".config") Commented Jun 13, 2009 at 19:14
  • Yes I want to delete all .config files that are contained in a certain directory. Commented Jun 13, 2009 at 19:15
  • A directory and all it's subdirectories, or just the directory? Commented Jun 13, 2009 at 19:22
  • 1
    The question is a duplicate, a neat explanation is provided here: stackoverflow.com/questions/1995373/… Commented Mar 30, 2015 at 13:33

3 Answers 3

17

Use the glob module:

import os from glob import glob for f in glob ('myfolder/*.config'): os.unlink (f) 
Sign up to request clarification or add additional context in comments.

1 Comment

+1: Yep, glob is the right approach here (if you don't want to walk sub-directories, of course -- that would need os.walk).
5

I would do something like the following:

import os files = os.listdir("myfolder") for f in files: if not os.path.isdir(f) and ".config" in f: os.remove(f) 

It lists the files in a directory and if it's not a directory and the filename has ".config" anywhere in it, delete it. You'll either need to be in the same directory as myfolder, or give it the full path to the directory. If you need to do this recursively, I would use the os.walk function.

3 Comments

I actually meant files, not folders. Sorry Dan
Not your fault - but this answer is now irrelevant due to OP editing the question.
note that this will delete files like 'my.config.bak'. Probably not what the OP wants.
1

Here ya go:

import os # Return all files in dir, and all its subdirectories, ending in pattern def gen_files(dir, pattern): for dirname, subdirs, files in os.walk(dir): for f in files: if f.endswith(pattern): yield os.path.join(dirname, f) # Remove all files in the current dir matching *.config for f in gen_files('.', '.config'): os.remove(f) 

Note also that gen_files can be easily rewritten to accept a tuple of patterns, since str.endswith accepts a tuple

Comments