我正在尝试使用 AST 模块生成一些代码。这就是我的代码的样子:
我想在每个键后添加具有正确格式的新行,以便输出看起来已格式化。
my_awesome_properties = [
(ast.Constant(value="key1"), ast.Constant(value="value1")),
(ast.Constant(value="key2"), ast.Constant(value="value2")),
(ast.Constant(value="key3"), ast.Constant(value="value3")),
]
my_awesome_properties_dict = ast.Dict(
keys=[key for key, value in my_awesome_properties],
values=[value for key, value in my_awesome_properties]
)
my_awesome_properties_assignment = ast.Assign(
targets=[ast.Name(id='my_awesome_properties', ctx=ast.Store())],
value=my_awesome_properties_dict
)
my_awesome_properties_assignment.lineno = 1
my_awesome_module_node = ast.Module(
body=[
my_awesome_properties_assignment,
],
type_ignores=[]
)
print(ast.unparse(my_awesome_module_node))
这会生成输出为
my_awesome_properties = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
如何在每个键后使用正确的格式添加新行,以便输出看起来像这样带有双引号?
my_awesome_properties = {
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
嗯,AST 本身正在生成正确的结构,只是没有正确格式化它,因为它没有任何选项来做到这一点。相反,您可以对字典进行一些快速的后脚本修改以获得您想要的输出。
unparsed_code = ast.unparse(my_awesome_module_node)
formatted_code = unparsed_code.replace(
"{",
"{\n "
).replace(
"}",
"\n}"
).replace(
", ",
",\n "
)
print(formatted_code)
这应该适合您的目的。