以编程方式在自我重写脚本中缩进Python代码?

时间:2016-02-17 20:06:02

标签: python

我试图获得一些乐趣所以我决定在创建自我重写脚本方面看看我能做些什么。我做了这个:

import os
import string

f = open('rewrite.py', 'r+')
text = f.read()
text = str(f.write("while True:" + text))
f.seek(0)
f.write(text)
f.close()

os.system("python rewrite.py")

但它有点乱,因为在插入while循环后它没有缩进。文件本身也称为 rewrite.py 。我知道这将是一个无限循环并创建一个巨大的文件,但我想看看它是否可能。

修改 运行此脚本后,文件内容现在如下所示:

Nonert os
import string

f = open('rewrite.py', 'r+')
text = f.read()
text = str(f.write("while True:" + text))
f.seek(0)
f.write(text)
f.close()

os.system("python rewrite.py")
while True:import os
import string

f = open('rewrite.py', 'r+')
text = f.read()
text = str(f.write("while True:" + text))
f.seek(0)
f.write(text)
f.close()

os.system("python rewrite.py")

2 个答案:

答案 0 :(得分:2)

Whats the best way to write python code into a python file?

对此的第二个答案非常好。我建议使用他所做的课程!

答案 1 :(得分:1)

我希望以下内容符合您的努力精神。注意我摆脱了while True:,因为它让你的程序不再重新运行 - 它会陷入无限循环而永远不再调用os.system()。在向此脚本添加任何其他内容之前,请仔细阅读三个if子句。运行风险自负:

import os

text = ''
f = open('rewrite.py', 'r+')
for line in f:
    if line.startswith("import") or line.startswith("os.system"):
        text += line
    elif line == "\n":
        text += line
        text += "for i in range(3):\n"
    else:
        text += ' ' * 4 + line
f.seek(0)
f.write(text)
f.close()
os.system("python rewrite.py")

如果一切顺利,它最终应该以错误停止:

SystemError: too many statically nested blocks