ImportanceOfBeingErnest ImportanceOfBeingErnest - 2 months ago 7
Python Question

How can I make a python script change itself?

How can I make a python script change itself?

To boil it down, I would like to have a python script (

run.py
)like this

a = 0
b = 1
print a + b
# do something here such that the first line of this script reads a = 1


Such that the next time the script is run it would look like

a = 1
b = 1
print a + b
# do something here such that the first line of this script reads a = 2


Is this in any way possible? The script might use external resources; however, everything should work by just running the one
run.py
-file.

EDIT:
It may not have been clear enough, but the script should update itself, not any other file. Sure, once you allow for a simple configuration file next to the script, this task is trivial.

Answer:

It is actually much easier than thought. @khelwood 's suggestion works just fine, opening the script and writing it's own content to it is completely unproblematic. @Gerrat's solution also works nicely. This is how I'm having it:

# -*- coding: utf-8 -*-
a = 0
b = 1
print a + b

content = []
with open(__file__,"r") as f:
for line in f:
content.append(line)

with open(__file__,"w") as f:
content[1] = "a = {n}\n".format(n=b)
content[2] = "b = {n}\n".format(n=a+b)
for i in range(len(content)):
f.write(content[i])

Answer

For an example (changing the value of a each time its run):

a = 0
b = 1
print a + b

with open(__file__, 'r') as f:
    lines = f.read().split('\n')
    val = int(lines[0].split(' = ')[-1])
    new_line = 'a = {}'.format(val+1)
    new_file = '\n'.join([new_line] + lines[1:])

with open(__file__, 'w') as f:
    f.write('\n'.join([new_line] + lines[1:]))