Как выполнить рекурсивное удаление, используя шаблон glob в каталоге, используя python? - PullRequest
0 голосов
/ 30 августа 2018
DirA
  file1.txt
  file2.conf
  DirB
      file3.txt
      file4.sh
      file5.sh
      DirC
          file6.bat
          file7.txt

В приведенном выше примере dir мне нужно выполнить рекурсивное удаление с шаблоном glob.

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

Используя приведенный выше шаблон, мне нужно удалить все файлы в форматах * .txt и * .sh во всех каталогах

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Вместо этого вы можете использовать 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))
0 голосов
/ 30 августа 2018
import os, glob

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

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

Если вы хотите, вы можете использовать списки для выполнения этой задачи. Cya!

0 голосов
/ 30 августа 2018
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)
...