#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}")