I'm developing a simple program which makes a Python script executable, and I'm working in the part which adds the interpreter path (#! /usr/bin/python). I tried to do it, but instead of adding a new line, it replaces the current and removes part of the next line. What I'm doing wrong?
I uploaded the source code to Ubuntu Pastebin: http://pastebin.ubuntu.com/1032683/ The wrong code is between lines 28 and 31:
wfile = open(file, 'r+') if wfile.readline() != "#! /usr/bin/python\n": wfile.seek(0) wfile.write("#! /usr/bin/python\n")
Using Python 2.7.2 with an iPad 2 (Python for iOS), also using 2.5.1 in the same iPad (Cydia port) for testing.
You can't do what you're trying to do. Seeking to the beginning of a file and doing a write will overwrite from that position, not append.
The only way to add a line in the middle (or beginning) of a file is to write out a new file with the data inserted where you want it to.
Joe is correct in that you have to can't just "insert" lines at the beginning of the file. Here is a solution for you, however:
with open(my_python_script, "r+") as f: first_line = f.readline() if first_line != "#! /usr/bin/python\n": lines = f.readlines() f.seek(0) f.write("#! /usr/bin/python\n") f.write(first_line) f.writelines(lines)
To add/replace the first line in each file given at a command line:
#!/usr/bin/env python import fileinput shebang = "#! /usr/bin/python\n" for line in fileinput.input(inplace=1): if fileinput.isfirstline() and line != shebang: print shebang, if not line.startswith("#!"): print line, else: print line,