writing back into the same file after reading from the file

misguided picture misguided · Jul 15, 2013 · Viewed 11.7k times · Source

My aim is to read line from the file , strip the blank spaces at the end of it and write back into the same file. I have tried the following code:

with open(filename, 'r+') as f:
    for i in f:
        f.write(i.rstrip()+"\n")

This seems to write at the end of the file, keeping initial data in the file intact . I know that using f.seek(0) would take the pointer back to start of the file , which I am assuming would be somehow required for this solution.

Can you please advise if there is different approach for this or am I on the right patch just need to add more logic into the code?

Answer

JonnyRo picture JonnyRo · Jul 15, 2013

Use a temporary file. Python provides facilities for creating temporary files in a secure manner. Call example below with: python modify.py target_filename

 import tempfile
 import sys

 def modify_file(filename):

      #Create temporary file read/write
      t = tempfile.NamedTemporaryFile(mode="r+")

      #Open input file read-only
      i = open(filename, 'r')

      #Copy input file to temporary file, modifying as we go
      for line in i:
           t.write(line.rstrip()+"\n")

      i.close() #Close input file

      t.seek(0) #Rewind temporary file to beginning

      o = open(filename, "w")  #Reopen input file writable

      #Overwriting original file with temporary file contents          
      for line in t:
           o.write(line)  

      t.close() #Close temporary file, will cause it to be deleted

 if __name__ == "__main__":
      modify_file(sys.argv[1])

References here: http://docs.python.org/2/library/tempfile.html