从文件读取后写回同一文件


问题内容

我的目的是从文件中读取行,在文件末尾去除空白并写回到同一文件中。我尝试了以下代码:

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

这似乎写在文件的末尾,使文件中的初始数据保持不变。我知道使用f.seek(0)会将指针带回到文件的开头,我认为这是解决方案所需要的。

您能告诉我是否有其他方法可以解决此问题,或者我是否只需要在代码中添加更多逻辑就可以了?


问题答案:

使用一个临时文件。Python提供了以安全方式创建临时文件的工具。调用以下示例: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])

参考资料在这里:http :
//docs.python.org/2/library/tempfile.html