用Python删除目录中的所有文件
我想删除目录中扩展名为.bak
所有文件。 我怎么能在Python中做到这一点?
通过os.listdir
和os.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.unlink
和os.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)