使用Python删除目录中的所有文件

时间:2010-01-03 15:58:20

标签: python file-io

我想在目录中删除扩展名为.bak的所有文件。我怎么能用Python做到这一点?

7 个答案:

答案 0 :(得分:242)

通过os.listdiros.remove

import os

filelist = [ f for f in os.listdir(mydir) if f.endswith(".bak") ]
for f in filelist:
    os.remove(os.path.join(mydir, f))

或通过glob.glob

import glob, os, os.path

filelist = glob.glob(os.path.join(mydir, "*.bak"))
for f in filelist:
    os.remove(f)

确保位于正确的目录中,最终使用os.chdir

答案 1 :(得分:23)

使用os.chdir更改目录。 使用glob.glob生成一个文件名列表,以“.bak”结尾。列表的元素只是字符串。

然后您可以使用os.unlink删除文件。 (PS。os.unlinkos.remove是同一函数的同义词。)

#!/usr/bin/env python
import glob
import os
directory='/path/to/dir'
os.chdir(directory)
files=glob.glob('*.bak')
for filename in files:
    os.unlink(filename)

答案 2 :(得分:11)

在Python 3.5中,如果需要检查文件属性或类型,os.scandir会更好 - 请参阅os.DirEntry以了解函数返回的对象的属性。

import os 

for file in os.scandir(path):
    if file.name.endswith(".bak"):
        os.unlink(file.path)

这也不需要更改目录,因为每个DirEntry已经包含文件的完整路径。

答案 3 :(得分:7)

你可以创建一个功能。您可以根据需要添加maxdepth来遍历子目录。

def findNremove(path,pattern,maxdepth=1):
    cpath=path.count(os.sep)
    for r,d,f in os.walk(path):
        if r.count(os.sep) - cpath <maxdepth:
            for files in f:
                if files.endswith(pattern):
                    try:
                        print "Removing %s" % (os.path.join(r,files))
                        #os.remove(os.path.join(r,files))
                    except Exception,e:
                        print e
                    else:
                        print "%s removed" % (os.path.join(r,files))

path=os.path.join("/home","dir1","dir2")
findNremove(path,".bak")

答案 4 :(得分:3)

首先glob,然后是unlink

答案 5 :(得分:1)

在Linux和macOS上,您可以对shell运行简单命令:

subprocess.run('rm /tmp/*.bak', shell=True)

答案 6 :(得分:0)

我意识到这是旧;然而,这里将是如何这样做只使用os模块......

def purgedir(parent):
    for root, dirs, files in os.walk(parent):                                      
        for item in files:
            # Delete subordinate files                                                 
            filespec = os.path.join(root, item)
            if filespec.endswith('.bak'):
                os.unlink(filespec)
        for item in dirs:
            # Recursively perform this operation for subordinate directories   
            purgedir(os.path.join(root, item))