如何使用Python删除文件夹中的所有子文件夹?

4

是否可以在不使用特定路径的情况下删除文件夹中的所有文件夹?在这里,我正在移动文件的内容,然后我想删除它(如果它是一个目录)。

import os, zipfile
import shutil
import os
from os import path


dir_name = 'C:\\Users\\Guest\\Desktop\\OJT\\samples'
destination = 'C:\\Users\\Guest\\Desktop\\OJT\\scanner\\test'
for path, subdirs, files in os.walk(destination):
    for name in files:
        filename = os.path.join(path, name)
        shutil.copy2(filename, destination)
3个回答

7
是的,可以使用shutil的rmtree方法。
import shutil 
shutil.rmtree('directory') # the directory you want to remove
os.listdir()

您也可以使用os.rmdir,但如果有任何内容,则无法运行。

如果您想检查该特定路径是否为目录,则可以使用os.path.isdir,然后在其返回TRUE时运行rmtree

如果您想保留文件夹不变,则可以walk该目录并对每个项目调用rmtree


2
我的意思是,如何删除文件夹中的所有文件夹,因为.rmtree也会删除根文件夹。 - user8892462
1
你可以进入目录,然后循环遍历其内容,并在所有目录上运行rmtree - Vineeth Sai

1

正如之前@Vineeth Sai所建议的那样,如果您想删除目录中的所有子目录,只需使用os.listdir()循环遍历每个文件,如果该文件是一个目录,则应用shutil.rmtree()

from os import listdir

from os.path import abspath
from os.path import isdir
from os.path import join

from shutil import rmtree

path = 'YOUR PATH HERE'

for file in listdir(path):
    full_path = join(abspath(path), file)

    if isdir(full_path):
        rmtree(full_path)

上面的代码还使用了 os.isdir() 来检查文件是否为目录。

1
如果Vineeth的答案不适合您的情况,您可以使用subprocess模块运行像下面这样的操作系统特定命令。
import subprocess
subprocess.call('rm -rf /path/of/the/dirctory/*', shell=True)

上述命令是针对linux的,您可以使用相同命令的windows版本。
注意-这里的shell=True将把*扩展为文件/文件夹。
另请注意,Vineeth's的答案与操作系统无关,而上述答案则与操作系统有关。请谨慎操作。
附注-您也可以使用subprocess模块运行powershell命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接