Отрицательный шаблон в функции Pathlib.rglob()

#python-3.6 #pathlib

#python-3.6 #pathlib

Вопрос:

Мне нужно найти все файлы python в папке, исключая __init__.py Моя первая попытка была

 import re
search_path.rglob(re.compile("(?!__init__).*.py"))
  

Такой код завершается ошибкой, поэтому в итоге я получаю:

 filter(
  lambda path: '__init__.py' != path.name and path.name.endswith('.py') and path.is_file(), search_path.rglob("*.py")
)
  

Похоже, что rglob не поддерживает регулярные выражения python.

  • Почему?
  • Поддерживает ли rglob отрицательные шаблоны?
  • Может ли этот код быть более элегантным?

Ответ №1:

Мне тоже нужно что-то очень похожее на это. Я придумал это:

 import pathlib

search_path = pathlib.Path.cwd() / "test_folder"
for file in filter(lambda item: item.name != "__init__.py", search_path.rglob("./*.py")):
    print(f"{file}")
  

Ответ №2:

В качестве альтернативы вы можете использовать fnmatch.

 import pathlib
import fnmatch

search_path = pathlib.Path.cwd() / "test_folder"
for file in search_path.rglob("./*.py"):
    if not fnmatch.fnmatch(file.name, "__init__.py"):
        print(f"{file}")