我正在测试一些python内容,然后我开始怀疑是否有可能像修改Python文件一样将其修改为文本文件。
我看过open(<filename>, "r+")
,但这只是编辑文件。我无法像修改python脚本一样修改它,不能修改实际的脚本,而不仅仅是缓存。
#main.py
import filea
filea.var1edit("Hello world")
之前曾预期:
#filea.py
var1 = "Text"
def var1edit(var):
global var1
var1 = var
在以下日期预期:
#filea.py
var1 = "Hello world"
def var1edit(var):
global var1
var1 = var
之后发生的事实:
#filea.py
var1 = "Text"
def var1edit(var):
global var1
var1 = var
答案 0 :(得分:1)
模块ast
和astunparse
很有用。
我们首先读取.py
文件,生成AST,修改AST,对其进行解析,然后将新代码写回。这是一个示例:
#main.py
import ast
import astunparse
class ReWriteSource(ast.NodeTransformer):
#visit 'Assign' node and modify
def visit_Assign(self,node):
if node.targets[0].id == 'var1' and isinstance(node.value,ast.Str):
node.value.s = 'Hello World!'
return node
#read .py file
with open('filea.py','r') as f:
source = f.read()
#generate the AST
source_ast = ast.parse(source)
#modify the AST
ReWriteSource().visit(source_ast)
#unparse and write it back
with open('filea.py','w') as f:
f.write(astunparse.unparse(source_ast))
原始filea.py
:
#filea.py
var1 = 'Text'
def var1edit(var):
global var1
var1 = var
修改了filea.py
:
#filea.py
var1 = 'Hello World!'
def var1edit(var):
global var1
var1 = var