Удаление одних и тех же файлов в нескольких папках (python)


У меня есть 100 папок с разными именами, и в каждой из них должны быть одинаковые три файла, но в некоторых папках все эти три файла отсутствуют.

Как я могу удалить те папки, которые пусты или содержат только один или два файла?

Вот эти три файла:

001.7z
002.7z
003.7z
2 5

2 ответа:

Python использует glob для получения файлов и папок.

import glob, os, shutil

# Get all folders in current directory.
folders = [item for item in glob.iglob('*') if os.path.isdir(item)]

# Loop though the folders.
for folder in folders:
    # Check amount of .7z files and if less than 3, remove folder tree.
    if len(glob.glob(folder + r'\*.7z')) < 3:
        shutil.rmtree(folder)

AutoIt с помощью FileFindFirstFile. Можно было бы использовать std UDFs, которые могут быть меньше кода.

$hFind1 = FileFindFirstFile('*')
If $hFind1 = -1 Then Exit 1

While 1
    ; Get next folder.
    $sFound1 = FileFindNextFile($hFind1)
    If @error Then ExitLoop

    ; Skip files.
    If Not @extended Then ContinueLoop

    ; Find 7z files.
    $hFind2 = FileFindFirstFile($sFound1 & '\*.7z')

    ; If no handle, delete folder.
    If $hFind2 = -1 Then
        DirRemove($sFound1)
        ContinueLoop
    EndIf

    ; Count for 7z files.
    $iCount = 0

    ; Get count of 7z files.
    While 1
        $sFound2 = FileFindNextFile($hFind2)
        If @error Then ExitLoop
        $iCount += 1
    WEnd

    FileClose($hFind2)

    ; Remove folder if count less than 3.
    If $iCount < 3 Then
        DirRemove($sFound1, 1); 1 = recurse
    EndIf
WEnd

FileClose($hFind1)

Прежде всего получите список всех каталогов в папке:

import shutil
import os

dirs = filter(os.path.isdir, os.listdir(os.curdir))

Запуск по всем папкам поиск конкретных файлов, соответствующих указанным именам файлов(завершите эту часть..):

for dir in dirs:
      files = filter(os.path.isfile, os.listdir(str(os.curdir) + dir))
      for file in files: 
           if file=="01.7z": ##Continue here
               shutil.rmtree(str(os.curdir) + dir)
               break