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

#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