Форум сайта python.su
Добрый день.
Нужен скрипт удаляющий файлы которые не подпадают под шаблон во вложенных папках.
Скрипт, который удаляет по шаблону есть и он работает, но нужно его изменить, чтобы он наоборот оставлял файлы по заданной маске, а лишние удалил.
from pathlib import Path path = Path('F:/Photo/') for file_name in path.rglob('*_2.jpg'): file_name.unlink()
Офлайн
Решение нашел самостоятельно
from pathlib import Path path = Path('F:/Photo/') for file_name in path.rglob('*.jpg'): if not file_name.name.endswith('_2.jpg'): file_name.unlink()
Офлайн
import os for root, dirs, files in os.walk("."): for file in files: if not file.endswith("*_2.jpg"): os.remove(os.path.join(root, file))
Отредактировано xam1816 (Фев. 27, 2023 11:29:57)
Офлайн
xam1816Астериск там не надо ставить, его нет в имени файла. Да и вообще лучше re использовать в таких вещах.if not file.endswith("*_2.jpg"):
>>> import re >>> >>> pat = r'^.+_2\.jpg$' >>> >>> re.search(pat, 'file_2.jpg') <_sre.SRE_Match object; span=(0, 10), match='file_2.jpg'> >>> >>> re.search(pat, 'file_1.jpg') >>> >>> re.search(pat, 'file_2.jpgx') >>> >>> re.search(pat, '_2.jpg') >>> >>> re.search(pat, 'f_2.jpg') <_sre.SRE_Match object; span=(0, 7), match='f_2.jpg'> >>>
>>> import re >>> >>> def predicate(fname): ... pat = r'^.+_2\.jpg$' ... return re.search(pat, fname) is not None ... >>> predicate('file_2.jpg') True >>> >>> predicate('file_1.jpg') False >>> >>> predicate('file_2.jpgx') False >>> >>> predicate('_2.jpg') False >>> >>> predicate('f_2.jpg') True >>>
>>> import re >>> >>> def predicate(fname): ... pat = r'^.+_2\.jpg$' ... return re.search(pat, fname) is not None ... >>> files = ('file_2.jpg', ... 'file_1.jpg', ... 'file_2.jpgx', ... '_2.jpg', ... 'f_2.jpg') >>> >>> list(map(predicate, files)) [True, False, False, False, True] >>>
Отредактировано py.user.next (Фев. 27, 2023 23:27:13)
Офлайн