Получение doc-строк с помощью ast в Python намного проще и надежнее, чем любой метод regex или перебора. Это также гораздо менее пугающе, чем я думал вначале.
Парсинг
Сначала вам нужно загрузить некоторый код python в виде строки и разобрать его с помощью команды
py_file = Path("plugins/auto_publish.py") raw_tree = py_file.read_text() tree = ast.parse(raw_tree)
Получение строки Docstring
Затем вы можете использовать ast.get_docstring
, чтобы получить docstring узла, который вы сейчас просматриваете. В случае свежей загрузки в файл, это будет докстринг уровня модуля, который находится в самом верху файла.
module_docstring = ast.get_docstring(tree)
Поиск всех функций
Чтобы получить докстринги всех функций, мы можем использовать ast.walk
для поиска узлов, которые являются экземпляром ast.FunctionDef
, затем запустить get_docstring
на этих узлах.
functions = [f for f in ast.walk(tree) if isinstance(f, ast.FunctionDef)] function_docs = [ast.get_docstring(f) for f in functions]
ast.walk docs: Рекурсивно вывести все узлы-потомки в дереве, начиная с узла
(включая сам узел), без указания порядка. Это полезно, если вы
хотите изменять только узлы на месте и не заботитесь о контексте.
Пример
Вот изображение того, как я запускаю этот пример через ipython
.