Исключить вложенные папки и файлы

#python #python-3.x

#python #python-3.x

Вопрос:

У меня небольшая проблема с исключением файлов и вложенных папок.

 for x in os.walk('core'):
  for y in glob.glob(os.path.join(x[0], '*.py')):
    s = y.replace('\', '.')
    x = s.replace('.py', '')
    cogs.append(x)
 

Мой код для извлечения всех файлов из каждой папки, и теперь я просто хочу исключить файлы __init__ models и подпапки migrations с файлами, такими как 0002_auto etc? Прямо сейчас я просто удаляю его из списка вручную, например:

 cogs.remove('core.rpg.models')
cogs.remove('core.rpg.__init__')
cogs.remove('core.rpg.migrations.__init__')
 

Комментарии:

1. Вы просто хотите перечислить файлы определенного каталога .. если это так, вы можете использовать этот метод import os print(os.listdir(‘/ path/ to / folder / to / list’)) .. если нет, то, пожалуйста, немного проясните свой вопрос

2. Моя основная папка core и приведенный выше код добавить в список из вложенных папок путь к файлу, cogs print выглядит ['core.__init__', 'core.admin.admin', 'core.admin.purge', 'core.fun.gameinfos', 'core.fun.games', 'core.fun.otherfuncommands', 'core.rpg.models', 'core.rpg.migrations.__init__'] примерно так, потому что он загружал скрипты в discordbot, но, как вы можете видеть, он добавил такие файлы, как __init__ и добавил вложенную папку с файлами, как core.rpg.migrations.__init__ я просто хочу иметь файлы core.rpg.script без вложенной папки и без некоторых файлов

Ответ №1:

Обычно вы делаете for root,dirs,files in os.walk('core'): .. и работаете с dirs or files и объединяете их с root , чтобы получить полный путь к ним.

Использование glob сверху сродни выполнению чего-либо с x[2] (он же files — список файлов внутри root )

 import os

what_i_want = []
skip_files = {"__init__.py"}    

for root, dirs, files in os.walk('core'):
    for f in files:
        # skipe the subdirs models and migrations
        if root.endswith("models") or root.endswith("migrations"):
            continue
        # skip any non .py file
        if not f.endswith(".py"):
            continue
        # skip ceratain .py files
        if f in skip_files:
            continue
        # remove .py from filename
        f = f[:-3]

        # add filename including full root and subst  to .
        what_i_want.append(os.path.join(root,f).replace("\","."))
 

Для этого потребуется еще немного нарезки, чтобы включить только начальный каталог («core»), а не полный путь к нему.