#python
Вопрос:
Я ищу упрощенный способ решения, приведенного ниже.
Это то, что я планирую здесь сделать:
- Перебирайте файлы в папке
- найти файл, соответствующий шаблону
- разделенное имя файла
- найдите соответствующий новый файл
- если не найден, удалите исходный файл
import os
for root, dirs, files in os.walk('folder'):
for old_file in files:
if fnmatch.fnmatch(old_file, 'pattern'):
spl = old_file.rsplit('_')
new_file = os.path.isfile(f'folder/xxx_{int(spl[6])*2}_{int(spl[7])*2}_yyy.txt')
if not new_file:
# delete old_file
Комментарии:
1. Это может быть лучшим кандидатом для CodeReview
2. Возможно, вы сможете объединить несколько строк
pathlib.Path(...).glob(...)
.3. Вместо
if fnmatch.fnmatch(old_file, 'pattern'): do thing
того, чтобы делатьif not fnmatch.fnmatch(old_file, 'pattern'): continue
это, вы можете отказаться от привязкиdo thing
. Определите места, где вы можете вырваться из текущего потока управления, и вы сможете значительно уменьшить вложенность.
Ответ №1:
Вы можете использовать оператор continue с измененными условиями для продвижения к удалению старых файлов без вложенности условий:
import os
for root, dirs, files in os.walk('folder'):
for old_file in files:
if not fnmatch.fnmatch(old_file, 'pattern'): continue
spl = old_file.rsplit('_')
new_file = os.path.isfile(f'folder/xxx_{int(spl[6])*2}_{int(spl[7])*2}_yyy.txt')
if new_file: continue
# delete old_file