#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»), а не полный путь к нему.