使用Python的基本I / O来操作或创建Python文件?

时间:2012-07-05 18:39:55

标签: python code-generation

最有效的方式 - 而且我知道它效率不高,但老实说我找不到更好的方法来操作Python(.py)文件,添加/减去/追加代码,是使用Python中包含的基本文件I / O模块吗?

举个例子:

obj = open('Codemanipulationtest.py', 'w+')
obj.write("print 'This shows you can do basic I/O?'")
obj.close()

将操作我拥有的文件,名为" codemanipulationtest.py",并添加一个print语句。这是可以使用的东西还是有更简单或更安全/有效的方法来操作/创建新的python代码?

我已经读过这篇文章:Parse a .py file, read the AST, modify it, then write back the modified source code

老实说,似乎I / O方法更容易。我对Python有点新意,所以我可能只是表现得很愚蠢.....提前感谢任何回复。

修改

所有这一切都只是为了解决使用代码的效果。我想把我最终使用的东西连接到某种学习算法,看看它一次可以产生一点点代码,看看它可以从那里去的地方....

2 个答案:

答案 0 :(得分:1)

这取决于您将使用您正在生成的代码执行的操作。您有几个选项,每个选项都比上一个更高级。

  • 创建文件并导入
  • 创建一个字符串,然后exec
  • 编写代码以直接创建类(或模块)而不是文本,插入所需的任何功能
  • 直接生成Python字节码并执行它!

如果您正在编写将由其他程序员使用和修改的代码,那么第一种方法可能是最好的。否则我推荐大多数用例的第三个。最后一个只针对受虐狂和前汇编语言程序员。

如果你想修改现有的Python源代码,你有时可以通过基本的搜索和替换进行简单的修改,特别是如果你对你正在使用的源文件有所了解,但更好的方法是ast模块。这将为您提供Python源代码的抽象表示,您可以对其进行修改,然后直接编译为Python对象。

答案 1 :(得分:1)

要生成代码,我会将其分解为各种类,IF类,FOR类等。然后你可以使用输出,其中每个类都有一个你可以依次调用的to_str()方法。

statements = [ ... ]

obj = open( "some.py", "w+" )

for s in statements:
    obj.write( s.to_str() )

obj.close()

通过这种方式,您可以轻松扩展项目,并且更易于理解和灵活。而且,它始终使用您想要的简单写入方法。

根据学习算法,这种突破各种类可以很好地导致一种代码的伪遗传算法。您可以将基因组编码为一系列语句,然后您只需要找到一种方法将参数传递给每个语句(如果需要等等)。