How to check existence of a folder and then remove it?
PythonLinuxPython 2.7RmdirPython 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