我想从 dataset3 文件夹中删除数据集文件夹。但以下代码并未删除数据集。
首先,我想检查数据集中是否已存在数据集,然后删除数据集。
有人可以指出我在以下代码中的错误吗?
for files in os.listdir("dataset3"):
if os.path.exists("dataset"):
os.system("rm -rf "+"dataset")
os.rmdir()
仅适用于空目录,但是 shutil.rmtree()
并不关心(即使有子目录),这使得它与 Linux rm -rf
命令非常相似。
import os
import shutil
dirpath = os.path.join('dataset3', 'dataset')
if os.path.exists(dirpath) and os.path.isdir(dirpath):
shutil.rmtree(dirpath)
现代方法
pathlib
模块做同样的事情,使代码更加面向对象和可读性:
from pathlib import Path
import shutil
dirpath = Path('dataset3') / 'dataset'
if dirpath.exists() and dirpath.is_dir():
shutil.rmtree(dirpath)
更好设置
ignore_errors
:
import shutil
shutil.rmtree('/folder_name', ignore_errors=True)
这更具可读性,也更简洁。
请注意,它将忽略所有错误,而不仅仅是目录丢失错误。
os.remove()
是删除文件。
os.rmdir()
是删除一个空目录。
shutil.rmtree()
是删除目录及其所有内容。
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")
试试这个:
for files in os.listdir("dataset3"):
if files=="dataset":
fn=os.path.join("dataset3", files)
os.system("rm -rf "+fn)
break
你不需要 os.path.exists() 因为 os.listdir() 已经告诉你,它存在。
如果您的文件夹名称是静态的,您可以使用:
if os.path.exists("dataset3/dataset"):
os.system("rm -rf dataset3/dataset")
或如:
try:
os.system("rm -rf dataset3/dataset")
except:
pass
这样就可以了:
for files in os.listdir('dataset3'):
if files == 'dataset':
os.rmdir(os.path.join(os.getcwd() + 'dataset3', files))
我认为更好的方法是使用标准
contextlib
库:
with contextlib.suppress(FileNotFoundError):
shutil.rmtree(path)
这具有两种最流行答案的优点,但没有缺点:
shutil.rmtree(path, ignore_errors=True)
一样,没有单独检查文件是否存在,因此没有竞争条件os.path.exists
+ shutil.rmtree(path)
一样,如果文件夹未成功删除,它会抛出错误。它并不比这两种解决方案更冗长,对我来说它读起来非常清楚。