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

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

279699 次浏览

先对他们进行 一团然后是 解除连接

经由 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))

只使用一个循环:

for f in os.listdir(mydir):
if not f.endswith(".bak"):
continue
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生成一个文件名列表,以结束它。巴克。列表的元素只是字符串。

然后您可以使用 os.unlink来删除这些文件

#!/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)

您可以创建一个函数。

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已经包含文件的完整路径。

在 Linux 和 macOS 上,可以对 shell 运行简单的命令:

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

我意识到这是旧的,但是,这里将是如何做到这一点,只使用操作系统模块..。

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))

对于一线溶液(WindowsLinux) ;

import glob,os


for file in glob.glob("<your_path>/*.bak"): print(file," this will be deleted")


if input("continue ?") == "Y":
for file in glob.glob("<your_path>/*.bak"): os.remove(file)