8

ファイルを1行ずつ新しいファイルにコピーするpythonプログラムを書いています。私が持っているコードは以下のとおりで、ループを使用してファイルを 1 行ずつコピーしています。

ただし、ファイルの行数は変更される可能性があるため、数値に依存するループを使用せずにPythonでファイルを1行ずつコピーする方法はありますか?代わりにEOF文字のようなものに依存してループを終了しますか?

import os
import sys

i = 0
f = open("C:\\Users\\jgr208\\Desktop\\research_12\\sap\\beam_springs.$2k","r")
copy = open("C:\\Users\\jgr208\\Desktop\\research_12\\sap\\copy.$2k","wt")
#loop that copies file line by line and terminates loop when i reaches 10
while i < 10:
     line = f.readline()
     copy.write(str(line))
     i = i +1
f.close()
copy.close()
4

5 に答える 5

15

ファイル オブジェクト自体を反復処理することにより、Python でファイル オブジェクトの行を反復処理できます。

for line in f:
    copy.write(line)

ファイルオブジェクトに関するドキュメントから:

行を読み取る別の方法は、ファイル オブジェクトをループすることです。これはメモリ効率が高く、高速であり、より単純なコードにつながります。

>>> for line in f:
        print line,
于 2012-07-20T17:39:40.643 に答える
13

を明示的に呼び出すことなく、ファイルを直接反復処理できますreadline

f = open("...", "r")
copy = open("...", "w")
for line in f:
    copy.write(line)
f.close()
copy.close()
于 2012-07-20T17:43:04.853 に答える
3

shutil行ごとにコピーするよりもこれを行うためのより良い方法については、モジュールを参照してください。

shutil.copyfile(src, dst)

src という名前のファイルの内容 (メタデータなし) を dst という名前のファイルにコピーします。dst は完全なターゲット ファイル名でなければなりません。ターゲット ディレクトリ パスを受け入れるコピーについては、 shutil.copy() を参照してください。src と dst が同じファイルの場合、Errorが発生します。宛先の場所は書き込み可能である必要があります。そうしないと、IOError 例外が発生します。dst が既に存在する場合は、置き換えられます。キャラクターデバイスやブロックデバイス、パイプなどの特殊ファイルは、この機能ではコピーできません。src と dst は文字列として与えられるパス名です。

編集: あなたの質問は、ソースファイルが揮発性であるため、行ごとにコピーしていると言っています。あなたのデザインはどこかおかしい。あなたが解決しようとしている問題について、さらに詳しく教えていただけますか?

于 2012-07-20T17:44:32.573 に答える