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

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

通过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

使用os.chdir来更改目录。 使用glob.glob生成一个以'.bak'结尾的文件名列表。 列表中的元素只是string。

然后你可以使用os.unlink删除文件。 ( 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) 

你可以创build一个函数。 根据需要添加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") 

在Python 3.5中,如果需要检查文件属性或types, os.scandir会更好 – 请参阅os.DirEntry以获取函数返回的对象的属性。

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

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

首先将它们放置 ,然后取消链接 。

在Linux和MacOS上,您可以运行简单的命令到shell:

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