How to check existence of a folder and then remove it?
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")
Solution 1:
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:
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:
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.