How to check existence of a folder and then remove it?

PythonLinuxPython 2.7Rmdir

Python Problem Overview


I want to remove dataset folder from dataset3 folder. But the following code is not removing dataset. First I want to check if dataset already exist in dataset then remove dataset.
Can some one please point out my mistake in following code?

for files in os.listdir("dataset3"):
    if os.path.exists("dataset"):
	    os.system("rm -rf "+"dataset")

Python Solutions


Solution 1 - Python

os.rmdir() only works if the directory is empty, however shutil.rmtree() doesn't care (even if there are subdirectories). It's also more portable than using the rm command via os.system().

import os
import shutil

dirpath = os.path.join('dataset3', 'dataset')
if os.path.exists(dirpath) and os.path.isdir(dirpath):
	shutil.rmtree(dirpath)

Modern approach

In Python 3.4+ you can do same thing using the pathlib module to make the code more object-oriented and readable:

from pathlib import Path
import shutil

dirpath = Path('dataset3') / 'dataset'
if dirpath.exists() and dirpath.is_dir():
	shutil.rmtree(dirpath)

Solution 2 - Python

os.remove() is to remove a file.

os.rmdir() is to remove an empty directory.

shutil.rmtree() is to delete a directory and all its contents.

import os

folder = "dataset3/"

# Method 1
for files in os.listdir(folder):
    if files == "dataset":
        os.remove(folder + "dataset")

# Method 2
if os.path.exists(folder + "dataset"):
    os.remove(folder + "dataset")

Solution 3 - Python

Better to set ignore_errors:

import shutil

shutil.rmtree('/folder_name', ignore_errors=True)

This is much more readable, and concise.

Note that it will ignore all errors, not just dir missing errors.

Solution 4 - Python

This will do it:

for files in os.listdir('dataset3'):
     if files == 'dataset':
         os.rmdir(os.path.join(os.getcwd() + 'dataset3', files))

Solution 5 - Python

try this:

for files in os.listdir("dataset3"):
  if files=="dataset":
    fn=os.path.join("dataset3", files)
    os.system("rm -rf "+fn)
    break

You do not need the os.path.exists() because os.listdir() already told you, that it exists.

And if your foldernames are static, you can do it with:

if os.path.exists("dataset3/dataset"):
  os.system("rm -rf dataset3/dataset")

or as:

try:
  os.system("rm -rf dataset3/dataset")
except:
  pass

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsaraView Question on Stackoverflow
Solution 1 - PythonmartineauView Answer on Stackoverflow
Solution 2 - PythonHuang Yen HaoView Answer on Stackoverflow
Solution 3 - PythonVedant AgarwalaView Answer on Stackoverflow
Solution 4 - PythonlchView Answer on Stackoverflow
Solution 5 - PythondedeView Answer on Stackoverflow