linux 如何用python检查一个文件夹的存在性,然后删除它?

0vvn1miw  于 2023-01-20  发布在  Linux
关注(0)|答案(5)|浏览(209)

我想从dataset3文件夹中删除dataset文件夹。但是下面的代码没有删除dataset。首先我想检查dataset是否已经存在于dataset中,然后删除dataset。
有人能指出我下面代码中的错误吗?

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

oxalkeyp1#

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

yfwxisqw2#

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

gstyhher3#

最好设置ignore_errors

import shutil

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

这是可读性强得多,简洁得多。
请注意,它将忽略所有错误,而不仅仅是dir缺失错误。

bvn4nwqk

bvn4nwqk4#

试试这个:

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
nwnhqdif

nwnhqdif5#

这将做到这一点:

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

相关问题