18

Im Tyring to Delete all Files in E:. with wildcard.

E:\test\*.txt

I would ask rather than test the os.walk. In windows.

4 Answers 4

58

The way you would do this is use the glob module:

import glob
import os
for fl in glob.glob("E:\\test\\*.txt"):
    #Do what you want with the file
    os.remove(fl)
Sign up to request clarification or add additional context in comments.

5 Comments

I just ran it on my machine and it worked fine. Are you sure you have permission to remove those files? What happens if you do the following on the command promt: E: <br />cd test <br />del [filename]?
Obviously replace "[filename]" with the name of a file.
OS= windows, permission: yes "E: <br />cd test <br />del [filename]" on windows??
Is there a reason using the glob module is the method preferred over the accepted answer? (Going by votes on answer) What advantages does it have over the other answer?
@AaronAlphonsus It let you use the * instead of if file.endswith(".txt"): in the accepted answer.
22

A slightly verbose writing of another method

import os
dir = "E:\\test"
files = os.listdir(dir)
for file in files:
    if file.endswith(".txt"):
        os.remove(os.path.join(dir,file))

Or

import os
[os.remove(os.path.join("E:\\test",f)) for f in os.listdir("E:\\test") if f.endswith(".txt")]

3 Comments

I'd rather write: map(os.remove, [os.path.join("E:\\test",f)) for f in os.listdir("E:\\test") if f.endswith(".txt")])
beautiful solution, woks amazingly and is cross-platform.
@AnthonyPerot Why is the use of map better than the list comprehension mentioned in the answer?
0

You could use popen for this as well if you want to do it in fewer lines

from subprocess import Popen
proc = Popen("del E:\test\*.txt",shell=False)

1 Comment

Best to use Python libraries as it makes your code cross-platform, is less brittle and gives rich exceptions. If brevity is important, you achieve the same in one line using Python native libs with: #import glob,os ; [os.remove(x) for x in glob.glob("E:\test\*.txt")]
0

If you want to delete file with more than one extension then define those extensions in tuple like below

import os

def purge(dir):
    files = os.listdir(dir)
    ext = ('.txt', '.xml', '.json')
    for file in files:
        if file.endswith(ext):
            print("File -> " + os.path.join(dir,file))
            os.remove(os.path.join(dir,file))

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.