Delete all file in folder python

How can I delete the contents of a local folder in Python?

The current project is for Windows, but I would like to see *nix also.

Delete all file in folder python

martineau

115k25 gold badges160 silver badges284 bronze badges

asked Oct 9, 2008 at 4:22

UnkwnTechUnkwnTech

85.2k65 gold badges183 silver badges227 bronze badges

3

import os, shutil
folder = '/path/to/folder'
for filename in os.listdir(folder):
    file_path = os.path.join(folder, filename)
    try:
        if os.path.isfile(file_path) or os.path.islink(file_path):
            os.unlink(file_path)
        elif os.path.isdir(file_path):
            shutil.rmtree(file_path)
    except Exception as e:
        print('Failed to delete %s. Reason: %s' % (file_path, e))

Delete all file in folder python

Mark Amery

132k78 gold badges394 silver badges442 bronze badges

answered Oct 9, 2008 at 4:27

Nick StinematesNick Stinemates

39.7k21 gold badges59 silver badges60 bronze badges

4

You can simply do this:

import os
import glob

files = glob.glob('/YOUR/PATH/*')
for f in files:
    os.remove(f)

You can of course use an other filter in you path, for example : /YOU/PATH/*.txt for removing all text files in a directory.

Delete all file in folder python

John Smith

7,0886 gold badges47 silver badges60 bronze badges

answered Apr 22, 2011 at 15:23

7

You can delete the folder itself, as well as all its contents, using shutil.rmtree:

import shutil
shutil.rmtree('/path/to/folder')
shutil.rmtree(path, ignore_errors=False, onerror=None)


Delete an entire directory tree; path must point to a directory (but not a symbolic link to a directory). If ignore_errors is true, errors resulting from failed removals will be ignored; if false or omitted, such errors are handled by calling a handler specified by onerror or, if that is omitted, they raise an exception.

Delete all file in folder python

Mark Amery

132k78 gold badges394 silver badges442 bronze badges

answered Oct 9, 2008 at 7:18

OliOli

14.7k8 gold badges30 silver badges36 bronze badges

11

Expanding on mhawke's answer this is what I've implemented. It removes all the content of a folder but not the folder itself. Tested on Linux with files, folders and symbolic links, should work on Windows as well.

import os
import shutil

for root, dirs, files in os.walk('/path/to/folder'):
    for f in files:
        os.unlink(os.path.join(root, f))
    for d in dirs:
        shutil.rmtree(os.path.join(root, d))

answered Jul 2, 2009 at 9:25

Iker JimenezIker Jimenez

6,9659 gold badges47 silver badges46 bronze badges

4

I'm surprised nobody has mentioned the awesome pathlib to do this job.

If you only want to remove files in a directory it can be a oneliner

from pathlib import Path

[f.unlink() for f in Path("/path/to/folder").glob("*") if f.is_file()] 

To also recursively remove directories you can write something like this:

from pathlib import Path
from shutil import rmtree

for path in Path("/path/to/folder").glob("**/*"):
    if path.is_file():
        path.unlink()
    elif path.is_dir():
        rmtree(path)

Delete all file in folder python

answered May 15, 2019 at 14:04

HuskyHusky

5,4422 gold badges43 silver badges40 bronze badges

3

Using rmtree and recreating the folder could work, but I have run into errors when deleting and immediately recreating folders on network drives.

The proposed solution using walk does not work as it uses rmtree to remove folders and then may attempt to use os.unlink on the files that were previously in those folders. This causes an error.

The posted glob solution will also attempt to delete non-empty folders, causing errors.

I suggest you use:

folder_path = '/path/to/folder'
for file_object in os.listdir(folder_path):
    file_object_path = os.path.join(folder_path, file_object)
    if os.path.isfile(file_object_path) or os.path.islink(file_object_path):
        os.unlink(file_object_path)
    else:
        shutil.rmtree(file_object_path)

answered Jul 7, 2011 at 18:25

jgoedersjgoeders

1,85718 silver badges23 bronze badges

7

This:

  • removes all symbolic links
    • dead links
    • links to directories
    • links to files
  • removes subdirectories
  • does not remove the parent directory

Code:

for filename in os.listdir(dirpath):
    filepath = os.path.join(dirpath, filename)
    try:
        shutil.rmtree(filepath)
    except OSError:
        os.remove(filepath)

As many other answers, this does not try to adjust permissions to enable removal of files/directories.

Delete all file in folder python

Mark Amery

132k78 gold badges394 silver badges442 bronze badges

answered Sep 21, 2012 at 8:24

Jon ChuJon Chu

1,8572 gold badges19 silver badges19 bronze badges

Using os.scandir and context manager protocol in Python 3.6+:

import os
import shutil

with os.scandir(target_dir) as entries:
    for entry in entries:
        if entry.is_dir() and not entry.is_symlink():
            shutil.rmtree(entry.path)
        else:
            os.remove(entry.path)

Earlier versions of Python:

import os
import shutil

# Gather directory contents
contents = [os.path.join(target_dir, i) for i in os.listdir(target_dir)]

# Iterate and remove each item in the appropriate manner
[shutil.rmtree(i) if os.path.isdir(i) and not os.path.islink(i) else os.remove(i) for i in contents]

answered Dec 2, 2012 at 5:51

Jacob WanJacob Wan

2,36321 silver badges19 bronze badges

4

Notes: in case someone down voted my answer, I have something to explain here.

  1. Everyone likes short 'n' simple answers. However, sometimes the reality is not so simple.
  2. Back to my answer. I know shutil.rmtree() could be used to delete a directory tree. I've used it many times in my own projects. But you must realize that the directory itself will also be deleted by shutil.rmtree(). While this might be acceptable for some, it's not a valid answer for deleting the contents of a folder (without side effects).
  3. I'll show you an example of the side effects. Suppose that you have a directory with customized owner and mode bits, where there are a lot of contents. Then you delete it with shutil.rmtree() and rebuild it with os.mkdir(). And you'll get an empty directory with default (inherited) owner and mode bits instead. While you might have the privilege to delete the contents and even the directory, you might not be able to set back the original owner and mode bits on the directory (e.g. you're not a superuser).
  4. Finally, be patient and read the code. It's long and ugly (in sight), but proven to be reliable and efficient (in use).

Here'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; even the result of os.walk() contains symbolic linked directories as well).
  • It handles read-only files nicely.

Here's the code (the only useful function is clear_dir()):

import os
import stat
import shutil


# http://stackoverflow.com/questions/1889597/deleting-directory-in-python
def _remove_readonly(fn, path_, excinfo):
    # Handle read-only files and directories
    if fn is os.rmdir:
        os.chmod(path_, stat.S_IWRITE)
        os.rmdir(path_)
    elif fn is os.remove:
        os.lchmod(path_, stat.S_IWRITE)
        os.remove(path_)


def force_remove_file_or_symlink(path_):
    try:
        os.remove(path_)
    except OSError:
        os.lchmod(path_, stat.S_IWRITE)
        os.remove(path_)


# Code from shutil.rmtree()
def is_regular_dir(path_):
    try:
        mode = os.lstat(path_).st_mode
    except os.error:
        mode = 0
    return stat.S_ISDIR(mode)


def clear_dir(path_):
    if is_regular_dir(path_):
        # Given path is a directory, clear its content
        for name in os.listdir(path_):
            fullpath = os.path.join(path_, name)
            if is_regular_dir(fullpath):
                shutil.rmtree(fullpath, onerror=_remove_readonly)
            else:
                force_remove_file_or_symlink(fullpath)
    else:
        # Given path is a file or a symlink.
        # Raise an exception here to avoid accidentally clearing the content
        # of a symbolic linked directory.
        raise OSError("Cannot call clear_dir() on a symbolic link")

answered Jul 19, 2014 at 20:21

Delete all file in folder python

RockalliteRockallite

15.9k6 gold badges53 silver badges48 bronze badges

1

As a oneliner:

import os

# Python 2.7
map( os.unlink, (os.path.join( mydir,f) for f in os.listdir(mydir)) )

# Python 3+
list( map( os.unlink, (os.path.join( mydir,f) for f in os.listdir(mydir)) ) )

A more robust solution accounting for files and directories as well would be (2.7):

def rm(f):
    if os.path.isdir(f): return os.rmdir(f)
    if os.path.isfile(f): return os.unlink(f)
    raise TypeError, 'must be either file or directory'

map( rm, (os.path.join( mydir,f) for f in os.listdir(mydir)) )

answered Nov 24, 2013 at 11:22

fmonegagliafmonegaglia

2,6892 gold badges24 silver badges33 bronze badges

6

I used to solve the problem this way:

import shutil
import os

shutil.rmtree(dirpath)
os.mkdir(dirpath)

Delete all file in folder python

answered Jun 17, 2013 at 11:52

ProfHase85ProfHase85

11.3k7 gold badges46 silver badges61 bronze badges

12

To delete all the files inside the directory as well as its sub-directories, without removing the folders themselves, simply do this:

import os
mypath = "my_folder" #Enter your path here
for root, dirs, files in os.walk(mypath, topdown=False):
    for file in files:
        os.remove(os.path.join(root, file))

    # Add this block to remove folders
    for dir in dirs:
        os.rmdir(os.path.join(root, dir))

# Add this line to remove the root folder at the end
os.rmdir(mypath)

Delete all file in folder python

answered Feb 26, 2019 at 15:59

Delete all file in folder python

Kevin PatelKevin Patel

5168 silver badges10 bronze badges

1

To delete all files inside a folder a I use:

import os
for i in os.listdir():
    os.remove(i)

answered May 12, 2021 at 19:04

andrecandrec

1393 silver badges7 bronze badges

3

You might be better off using os.walk() for this.

os.listdir() doesn't distinguish files from directories and you will quickly get into trouble trying to unlink these. There is a good example of using os.walk() to recursively remove a directory here, and hints on how to adapt it to your circumstances.

answered Oct 9, 2008 at 5:52

mhawkemhawke

81.7k9 gold badges113 silver badges135 bronze badges

0

If you are using a *nix system, why not leverage the system command?

import os
path = 'folder/to/clean'
os.system('rm -rf %s/*' % path)

answered Jun 12, 2018 at 9:06

silverbulletttsilverbullettt

8161 gold badge10 silver badges13 bronze badges

5

I had to remove files from 3 separate folders inside a single parent directory:

directory
   folderA
      file1
   folderB
      file2
   folderC
      file3

This simple code did the trick for me: (I'm on Unix)

import os
import glob

folders = glob.glob('./path/to/parentdir/*')
for fo in folders:
  file = glob.glob(f'{fo}/*')
  for f in file:
    os.remove(f)

Hope this helps.

answered Jan 11, 2020 at 11:34

Delete all file in folder python

NicoBarNicoBar

5251 gold badge7 silver badges14 bronze badges

Yet Another Solution:

import sh
sh.rm(sh.glob('/path/to/folder/*'))

answered May 12, 2014 at 16:33

Robin WinslowRobin Winslow

10.4k8 gold badges58 silver badges89 bronze badges

1

I konw it's an old thread but I have found something interesting from the official site of python. Just for sharing another idea for removing of all contents in a directory. Because I have some problems of authorization when using shutil.rmtree() and I don't want to remove the directory and recreate it. The address original is http://docs.python.org/2/library/os.html#os.walk. Hope that could help someone.

def emptydir(top):
    if(top == '/' or top == "\\"): return
    else:
        for root, dirs, files in os.walk(top, topdown=False):
            for name in files:
                os.remove(os.path.join(root, name))
            for name in dirs:
                os.rmdir(os.path.join(root, name))

answered May 2, 2013 at 14:24

Delete all file in folder python

SawyerSawyer

5285 silver badges17 bronze badges

Well, I think this code is working. It will not delete the folder and you can use this code to delete files having the particular extension.

import os
import glob

files = glob.glob(r'path/*')
for items in files:
    os.remove(items)

answered Nov 4, 2019 at 18:59

Delete all file in folder python

Pretty intuitive way of doing it:

import shutil, os


def remove_folder_contents(path):
    shutil.rmtree(path)
    os.makedirs(path)


remove_folder_contents('/path/to/folder')

answered Jul 26, 2019 at 9:16

Delete all file in folder python

ManriqueManrique

1,9003 gold badges14 silver badges32 bronze badges

1

Use the method bellow to remove the contents of a directory, not the directory itself:

import os
import shutil

def remove_contents(path):
    for c in os.listdir(path):
        full_path = os.path.join(path, c)
        if os.path.isfile(full_path):
            os.remove(full_path)
        else:
            shutil.rmtree(full_path)

answered Feb 3, 2019 at 8:23

Delete all file in folder python

amrezzdamrezzd

1,56214 silver badges35 bronze badges

3

Answer for a limited, specific situation: assuming you want to delete the files while maintainig the subfolders tree, you could use a recursive algorithm:

import os

def recursively_remove_files(f):
    if os.path.isfile(f):
        os.unlink(f)
    elif os.path.isdir(f):
        for fi in os.listdir(f):
            recursively_remove_files(os.path.join(f, fi))

recursively_remove_files(my_directory)

Maybe slightly off-topic, but I think many would find it useful

Delete all file in folder python

Mark Amery

132k78 gold badges394 silver badges442 bronze badges

answered Dec 27, 2016 at 10:55

fmonegagliafmonegaglia

2,6892 gold badges24 silver badges33 bronze badges

1

use this function

import glob

def truncate(path):
    files = glob.glob(path+'/*.*')
    for f in files:
        os.remove(f)

truncate('/my/path')

answered Sep 19 at 17:22

Delete all file in folder python

dazzafactdazzafact

2,0683 gold badges27 silver badges44 bronze badges

I resolved the issue with rmtree makedirs by adding time.sleep() between:

if os.path.isdir(folder_location):
    shutil.rmtree(folder_location)

time.sleep(.5)

os.makedirs(folder_location, 0o777)

Delete all file in folder python

answered Mar 21, 2017 at 16:10

physlexicphyslexic

7861 gold badge8 silver badges20 bronze badges

the easiest way to delete all files in a folder/remove all files

import os
files = os.listdir(yourFilePath)
for f in files:
    os.remove(yourFilePath + f)

answered Jul 30, 2019 at 18:40

PyBossPyBoss

4677 silver badges18 bronze badges

1

This should do the trick just using the OS module to list and then remove!

import os
DIR = os.list('Folder')
for i in range(len(DIR)):
    os.remove('Folder'+chr(92)+i)

Worked for me, any problems let me know!

answered Jun 20, 2016 at 15:52

How do I delete all files in a directory in Python?

To delete Directories.
Use os.rmdir() or pathlib.Path.rmdir() to delete an empty directory..
use the shutil. rmtree() to recursively delete a directory and all files from it..

How do I delete multiple files in a directory in Python?

To delete multiple files, just loop over your list of files and use the above os. rmdir() function. To delete a folder containing all files you want to remove have to import shutil package. Then you can remove the folder as follows.

How do you delete a file or folder in Python?

Deleting a file or folder in Python.
os. remove() removes a file..
os. unlink() removes a file. it is a Unix name of remove() method..
shutil. rmtree() deletes a directory and all its contents..
pathlib. Path. unlink() deletes a single file The pathlib module is available in Python 3.4 and above..

How do I delete everything in a folder?

You can delete multiple files or folders by holding down the Ctrl key and clicking each file or folder before pressing Delete . You can hold down the Shift key while pressing the Delete key to prevent files from going to the Recycle Bin when deleted.