如何使用 python 在目录中使用 glob 模式执行递归删除?
How to perform recursive delete using glob pattern in a directory using python?
DirA
file1.txt
file2.conf
DirB
file3.txt
file4.sh
file5.sh
DirC
file6.bat
file7.txt
在上面的示例目录中,我需要使用 glob 模式执行递归删除。
pattern = ['*,txt','*.sh']
使用上面的模式我需要删除所有目录中所有*.txt和*.sh格式的文件
import os
import glob
for filename in glob.iglob('DirA/**/*.txt', recursive=True):
os.remove(filename)
for filename in glob.iglob('DirA/**/*.sh', recursive=True):
os.remove(filename)
这应该可以递归地删除目录中的所有 txt 和 sh 文件。
或者如果你想指定一个带有模式的数组:
import os
import glob
def removeAll(pathToDir, patterns):
for pattern in patterns:
for filename in glob.iglob(pathToDir + '/**/' + pattern, recursive=True):
os.remove(filename)
patterns = ['*.txt', '*.sh']
removeAll('DirA', patterns)
您可以使用os.walk
代替,这样您只需要遍历目录一次。使用 glob
你将不得不遍历两次,因为你有两种模式要寻找。
import os
for root, _, files in os.walk('DirA'):
for file in files:
if any(file.endswith(ext) for ext in pattern):
os.remove(os.path.join(root, file))
import os, glob
pattern = ['*.txt', '*.sh']
for p in pattern:
[os.remove(x) for x in glob.iglob('DirA/**/' + p, recursive=True)]
如果您愿意,可以使用列表解析来完成此任务。赛亚!
DirA
file1.txt
file2.conf
DirB
file3.txt
file4.sh
file5.sh
DirC
file6.bat
file7.txt
在上面的示例目录中,我需要使用 glob 模式执行递归删除。
pattern = ['*,txt','*.sh']
使用上面的模式我需要删除所有目录中所有*.txt和*.sh格式的文件
import os
import glob
for filename in glob.iglob('DirA/**/*.txt', recursive=True):
os.remove(filename)
for filename in glob.iglob('DirA/**/*.sh', recursive=True):
os.remove(filename)
这应该可以递归地删除目录中的所有 txt 和 sh 文件。
或者如果你想指定一个带有模式的数组:
import os
import glob
def removeAll(pathToDir, patterns):
for pattern in patterns:
for filename in glob.iglob(pathToDir + '/**/' + pattern, recursive=True):
os.remove(filename)
patterns = ['*.txt', '*.sh']
removeAll('DirA', patterns)
您可以使用os.walk
代替,这样您只需要遍历目录一次。使用 glob
你将不得不遍历两次,因为你有两种模式要寻找。
import os
for root, _, files in os.walk('DirA'):
for file in files:
if any(file.endswith(ext) for ext in pattern):
os.remove(os.path.join(root, file))
import os, glob
pattern = ['*.txt', '*.sh']
for p in pattern:
[os.remove(x) for x in glob.iglob('DirA/**/' + p, recursive=True)]
如果您愿意,可以使用列表解析来完成此任务。赛亚!