writing back into the same file after reading from the file
问题内容:
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?
问题答案:
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