2016-07-29 7 views
1

ファイルがあり、ファイル内の特定の行を選択して別のファイルにコピーしたい。Python:1つのファイルから行の範囲を選択して別のファイルにコピーする

最初のファイルでは、コピーしたい行に "XYZ"という単語があり、ここからは次の200行(マッチラインを含む)を選択して別のファイルにコピーします。

以下は、私のコード

match_1 = 'This is match word' 
with open('myfile.txt') as f1: 
    for num, line in enumerate(f1, 1): 
     if log_1 in line: 
      print line 

で上記のコードは、行の先頭に私をリードし、私は200行を選択する必要がマッチしたラインを形成してからコピーし、別のテキストファイルに移動します。

私は、while文のようなオプションのカップルを試してみましたが、私は、一致が検出された後

答えて

1

あなたはファイルオブジェクトにitertools.isliceを使用することができます助けるfully.Pleaseロジックを構築することはできませんよ。

from itertools import islice 

# some code before matching line is found 
chunk = line + ''.join(islice(f1, 200)) 

これは次の200行までの反復子f1を消費するため、ループ内のnumの数がループ内に置かれていると、一貫性がない可能性があります。あなたが試合を見つけた後、ファイル内の他の行を必要としない場合

、あなたが使用することができます。

from itertools import islice 

with open('myfile.txt') as f1, open('myotherfile.txt') as f_out: 
    for num, line in enumerate(f1, 1): 
     if log_1 in line: 
      break 
    chunk = line + ''.join(islice(f1, 200)) 
    f_out.write(chunk) 
+0

あなたの素早い対応のためにモーゼに感謝します。これは私の問題を正確に解決します。 – Davidson

0

どう

>>> with open("pokemonhunt", "r") as f: 
... Lines = [] 
... numlines = 5 
... count = -1 
... for line in f: 
...  if "pokemon" in line:   % gotta catch 'em all!!! 
...  count = 0 
...  if -1 < count < numlines: 
...  Lines.append(line) 
...  count += count 
...  if count == numlines: 
...  with open("pokebox","w") as tmp: tmp.write("".join(Lines)) 

または私はあなたの質問を誤解しているようなものでしょうか?

+0

(複数のファイルが一致すると思われる場合は、毎回出力ファイル名を変更するか、同じファイルに追加するなど) –

+0

あなたの素早い対応のためにTasosに感謝します....実際にファイルを開き、ファイル内の単語。一致したら、次の200行をコピーし、さらに解析するために新しいファイルを入れる必要があります。私は次回の質問にもっと明快さを加えようとします... – Davidson

+0

はい、これは何ですかこれはします。 (もしあなたの言葉が "ポケモン"で、あなたが5行を望むならば:p) –

関連する問題