Velvet Star Monitor

Standout celebrity highlights with iconic style.

general

Remove all files in a directory

Writer Olivia Zamora

Trying to remove all of the files in a certain directory gives me the follwing error:

OSError: [Errno 2] No such file or directory: '/home/me/test/*'

The code I'm running is:

import os
test = "/home/me/test/*"
os.remove(test)
2

13 Answers

os.remove() does not work on a directory, and os.rmdir() will only work on an empty directory. And Python won't automatically expand "/home/me/test/*" like some shells do.

You can use shutil.rmtree() on the directory to do this, however.

import shutil
shutil.rmtree('/home/me/test') 

be careful as it removes the files and the sub-directories as well.

4

os.remove doesn't resolve unix-style patterns. If you are on a unix-like system you can:

os.system('rm '+test)

Else you can:

import glob, os
test = '/path/*'
r = glob.glob(test)
for i in r: os.remove(i)
2

Bit of a hack but if you would like to keep the directory, the following can be used.

import os
import shutil
shutil.rmtree('/home/me/test')
os.mkdir('/home/me/test')

Because the * is a shell construct. Python is literally looking for a file named "*" in the directory /home/me/test. Use listdir to get a list of the files first and then call remove on each one.

Although this is an old question, I think none has already answered using this approach:

# python 2.7
import os
d='/home/me/test'
filesToRemove = [os.path.join(d,f) for f in os.listdir(d)]
for f in filesToRemove: os.remove(f) 
6

This will get all files in a directory and remove them.

import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
dir = os.path.join(BASE_DIR, "foldername")
for root, dirs, files in os.walk(dir): for file in files: path = os.path.join(dir, file) os.remove(path)

star is expanded by Unix shell. Your call is not accessing shell, it's merely trying to remove a file with the name ending with the star

shutil.rmtree() for most cases. But it doesn't work for in Windows for readonly files. For windows import win32api and win32con modules from PyWin32.

def rmtree(dirname): retry = True while retry: retry = False try: shutil.rmtree(dirname) except exceptions.WindowsError, e: if e.winerror == 5: # No write permission win32api.SetFileAttributes(dirname, win32con.FILE_ATTRIBUTE_NORMAL) retry = True

os.remove will only remove a single file.

In order to remove with wildcards, you'll need to write your own routine that handles this.

There are quite a few suggested approaches listed on this forum page.

Please see my answer here:

It's a long and ugly, but reliable and efficient solution.

It resolves a few problems which are not addressed by the other answerers:

  • It correctly handles symbolic links, including not calling shutil.rmtree() on a symbolic link (which will pass the os.path.isdir() test if it links to a directory).
  • It handles read-only files nicely.
1
#python 2.7
import tempfile
import shutil
import exceptions
import os
def TempCleaner(): temp_dir_name = tempfile.gettempdir() for currentdir in os.listdir(temp_dir_name): try: shutil.rmtree(os.path.join(temp_dir_name, currentdir)) except exceptions.WindowsError, e: print u'Не удалось удалить:'+ e.filename

To Removing all the files in folder.

import os
import glob
files = glob.glob(os.path.join('path/to/folder/*'))
files = glob.glob(os.path.join('path/to/folder/*.csv')) // It will give all csv files in folder
for file in files: os.remove(file)

Another way I've done this:

os.popen('rm -f ./yourdir')
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy