10

私の目的は、ファイルから行を読み取り、末尾の空白を取り除き、同じファイルに書き戻すことです。次のコードを試しました:

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

これは、ファイルの最初のデータをそのままにして、ファイルの最後に書き込むようです。f.seek(0)using を使用すると、ポインターがファイルの先頭に戻ることがわかります。これは、このソリューションに何らかの形で必要になると想定しています。

これに別のアプローチがあるかどうか、またはコードにロジックを追加する必要があるだけの適切なパッチがあるかどうかを教えてください。

4

2 に答える 2

6

一時ファイルを使用します。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

于 2013-07-15T04:49:19.170 に答える