我想删除目录中扩展名为.bak
的所有文件。我怎样才能在Python中做到这一点?使用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
- 1. 删除目录中的所有文件
- 2. 删除目录及所有文件中
- 3. 如何使用批次删除目录中的所有文件?
- 4. 删除目录和所有子目录中的特定文件
- 5. 删除目录中的所有文件,但保留目录?
- 6. 空目录(删除所有文件)
- 7. 删除所有文件,但不目录
- 8. 删除所有macosx目录中的所有svn文件
- 9. 如何删除所有目录中的所有文件?
- 10. 使用Gulp从目录中删除所有min.css文件
- 11. 删除所有文件在一个目录中使用CodeIgniter
- 12. 脚本蝙蝠删除所有文件和目录中的所有目录c:\
- 13. 使用find来删除所有的子目录(及其文件)
- 14. 将所有未记录的文件删除到Git目录中?
- 15. 如何用C++删除目录及其中的所有文件?
- 16. 删除所有用户目录中的文件夹
- 17. 删除所有文件和文件夹,但排除目录
- 18. PHP删除的目录都是空的所有文件和所有子目录
- 19. Codeigniter:删除所有文件后删除目录
- 20. 无法删除NetBeans中的servlet目录中的所有文件
- 21. 中的所有文本文件的目录使用删除字符SED
- 22. 删除所有子目录和子文件而不删除父/根目录?
- 23. 蝙蝠文件删除除最后创建的所有目录
- 24. 删除除4个最新目录以外的所有文件
- 25. 删除路径中的所有目录
- 26. 使用Python查找并删除目录中的特定文件和子目录
- 27. 如何用PHP删除指定目录下的所有文件?
- 28. 删除目录中的所有文件vb6
- 29. 的Objective-C:从目录中删除所有文件
- 30. 如何删除目录中空的所有文件?
@ 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