Я не уверен, почему мой ответ был удален, но две функции, приведенные ниже, являются моим решением моей проблемы добавления операторов строки в начало функций в файле Python.
Я используюТермин «подпрограммы» означает любую функцию или метод в файле.Обратите внимание, что получить файл из узла AST нелегко, поэтому я храню его вместе с узлом AST.
import ast
def get_routines_from_file(repo_file):
'''
Returns the methods and functions from the file
'''
routines = []
with open(repo_file) as file:
repo_file_content = file.read()
repo_module = ast.parse(repo_file_content)
for node in ast.walk(repo_module):
if isinstance(node, ast.FunctionDef):
routines.append((node, repo_file))
return routines
def prepend_statement(self, file, node, statement):
'''
Writes a statement to the beginning of the routine
'''
first_node = node.body[0]
first_line_in_routine = first_node.lineno
# you unfortunately can't used first_node.col_offset because comments
# return -1 as their col_offset.
column_offset = node.col_offset + 4
indentation = ' ' * column_offset
statement = indentation + statement + '\n'
with open(file, 'r') as f:
contents = f.readlines()
contents.insert(first_line_in_routine - 1, statement)
with open(file, 'w') as f:
f.writelines(contents)