How can I add a new line of text at top of a file?

12,360

Solution 1

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.

Solution 2

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)         

Solution 3

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,
Share:
12,360
Xerz
Author by

Xerz

Updated on June 13, 2022

Comments

  • Xerz
    Xerz almost 2 years

    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.

  • Joel Cornett
    Joel Cornett almost 12 years
    @espectalll123: Joe is absolutely correct. Any solution will require you to read() the entire contents of the file, insert a line at the beginning, and then write() the entire contents back into the file.
  • Xerz
    Xerz almost 12 years
    In that case, I will rewrite the program. Thanks.