修改python文件,就像它是文本文件一样,但是仍然具有变量等

时间:2019-01-22 09:56:15

标签: python text-files editing

我正在测试一些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

1 个答案:

答案 0 :(得分:1)

模块astastunparse很有用。 我们首先读取.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