Удаление одних и тех же файлов в нескольких папках (python)
У меня есть 100 папок с разными именами, и в каждой из них должны быть одинаковые три файла, но в некоторых папках все эти три файла отсутствуют.
Как я могу удалить те папки, которые пусты или содержат только один или два файла?
Вот эти три файла:
001.7z
002.7z
003.7z
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