如何用python检查文件夹是否存在然后删除它?

问题描述 投票:0回答:6

我想从 dataset3 文件夹中删除数据集文件夹。但以下代码并未删除数据集。 首先,我想检查数据集中是否已存在数据集,然后删除数据集。
有人可以指出我在以下代码中的错误吗?

for files in os.listdir("dataset3"):
    if os.path.exists("dataset"):
        os.system("rm -rf "+"dataset")
python linux rmdir
6个回答
140
投票

Python 的

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)

现代方法

在 Python 3.4+ 中,您可以使用

pathlib
模块做同样的事情,使代码更加面向对象和可读性:

from pathlib import Path
import shutil

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

29
投票

更好设置

ignore_errors
:

import shutil

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

这更具可读性,也更简洁。

请注意,它将忽略所有错误,而不仅仅是目录丢失错误。


27
投票

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")

1
投票

试试这个:

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

0
投票

这样就可以了:

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

0
投票

我认为更好的方法是使用标准

contextlib
库:

with contextlib.suppress(FileNotFoundError):
    shutil.rmtree(path)

这具有两种最流行答案的优点,但没有缺点:

  • shutil.rmtree(path, ignore_errors=True)
    一样,没有单独检查文件是否存在,因此没有竞争条件
  • os.path.exists
    +
    shutil.rmtree(path)
    一样,如果文件夹未成功删除,它抛出错误。

它并不比这两种解决方案更冗长,对我来说它读起来非常清楚。

© www.soinside.com 2019 - 2024. All rights reserved.