使用Python删除目录中的所有文件
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
。
你的第一个例子是使用冗余for循环。你可以通过 - [os.remove(f)for os.listdir(“。”)if f.endswith(“。bak”)] - ,因为列表解析是为了使用。如果f.endswith(“.bak”): os.remove(f) – dragonjujo 2010-01-03 16:47:33
@或者您可以将理解中的'if'移动到for循环中 - for os.listdir(“。”): @ slh2080既然您说问题已解决,为什么不将答案标记为正确答案? – blwy10 2010-01-03 17:00:36
@dragonjujo,是的,我知道,但我认为这将是更清晰的这种方式.. – miku 2010-01-03 17:12:18
使用os.chdir
更改目录。 使用glob.glob
生成以'.bak'结尾的文件名列表。列表中的元素只是字符串。
然后您可以使用os.unlink
删除文件。 (PS。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)
,你可以创建一个函数。根据需要添加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,os.scandir
是更好,如果你需要检查文件属性或类型 - 见os.DirEntry
对于年代由函数返回的对象的属性。
import os
for file in os.scandir(path):
if file.name.endswith(".bak"):
os.unlink(file.path)
这也并不需要,因为每个DirEntry
改变目录已经包含完整的文件路径。
你错过了一个冒号,for循环中的第一行应该是'if file.name.endswith(“。bak”):' – TSeymour 2017-03-03 18:38:50
谢谢!这会教我编写代码而不实际运行它们 – 2017-03-04 01:40:02
在Linux和MacOS,你可以在shell中运行简单的命令:
subprocess.run('rm /tmp/*.bak', shell=True)
在我看来,这不是一个好的选择。这不是便携式的,由于额外的子过程,可能会更昂贵。最好使用Python API。 – Haakon 2018-02-16 21:40:19
@ slh2080:发布“解决”是不是你在这个网站做什么。你所做的是选择你实际使用的答案,然后点击复选标记来表明它解决了你的问题。 – 2010-01-03 17:05:53
对不起。感谢您指出我的错误。这不是作业,只是在业余时间学习python。我点击了我使用的答案,但那是在我看到ghostdog74响应之前。 – slh2080 2010-01-10 04:27:16
注意:要删除整个目录树['shutil.rmtree(path)''可以使用](https://docs.python.org/3/library/shutil.html#shutil.rmtree)。 – jfs 2015-07-02 13:37:24