如何使用python在目录中使用glob模式执行递归删除?

问题描述 投票:0回答:3
DirA
  file1.txt
  file2.conf
  DirB
      file3.txt
      file4.sh
      file5.sh
      DirC
          file6.bat
          file7.txt

在上面的示例目录中,我需要使用glob模式执行递归删除。

pattern = ['*,txt','*.sh']

使用上面的模式我需要在所有目录中删除所有带有* .txt和* .sh格式的文件

python delete-file
3个回答
1
投票
import os, glob

pattern = ['*.txt', '*.sh']

for p in pattern:
    [os.remove(x) for x in glob.iglob('DirA/**/' + p, recursive=True)]

如果您愿意,可以使用列表推导来完成此任务。氰!


0
投票
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)

0
投票

您可以使用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))
© www.soinside.com 2019 - 2024. All rights reserved.