问题:使用Python删除目录中的所有文件
我想删除目录中带有扩展名的所有文件.bak
。如何在Python中做到这一点?
回答 0
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
使用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)
回答 2
在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
您可以创建一个函数。根据需要添加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
回答 5
在Linux和macOS上,您可以对shell运行简单的命令:
subprocess.run('rm /tmp/*.bak', shell=True)
回答 6
我意识到这很老了;但是,这将是仅使用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))