【问题标题】:How to check existence of a folder and then remove it?如何检查文件夹是否存在然后将其删除?
【发布时间】:2017-10-01 14:01:45
【问题描述】:

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

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

【问题讨论】:

  • @HFBrowning - 这对目录不太有效。
  • 您没有使用files 文件名,即使使用了,您也需要将原始路径('dataset3')添加到其中。
  • 那我该怎么做
  • 按数据集文件夹,它的字面意思是“数据集”?
  • 如果您知道目录的名称,则无需进行任何检查。 os.system("rm -rf dataset3/dataset") 完成这项工作。

标签: python linux python-2.7 rmdir


【解决方案1】:

这样就可以了:

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

【讨论】:

  • 对于os.path.join(),您不需要/不想在'/dataset3' 中包含前导斜杠。
  • @martineau 已修复!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    试试这个:

    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
    

    【讨论】:

      【解决方案4】:

      os.rmdir() 仅在目录为空时有效,但shutil.rmtree() 不在乎(即使有子目录)。它也比通过os.system() 使用rm 命令更便携。

      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)
      

      【讨论】:

      • Path 是相对路径吗?按照常识,我更喜欢绝对路径。
      • @Timo:在这种情况下,它的值恰好是相对的。 PathPurePath 模块中定义的PurePath 类的子类,它本身既不是绝对的也不是相对的——它们都可以。这些类使访问路径的组件易于访问,并允许以面向对象的方式对它们进行操作。另请注意,有时使用相对路径非常有意义 - 例如,当您不想将绝对路径硬编码到代码中或直到运行时才知道根文件夹是什么时。
      【解决方案5】:

      最好设置ignore_errors:

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

      这更易读,更简洁。

      请注意,它将忽略所有错误,而不仅仅是 dir 缺失错误。

      【讨论】:

        猜你喜欢
        • 2021-03-29
        • 2011-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-12
        • 2019-03-09
        相关资源
        最近更新 更多