2016-04-17 13 views
0
from itertools import zip_longest 
f = open("all_info.txt", "a") 
with open("all_info.txt") as f, open ("over_speeding.txt") as f1, open("fine.txt") as fine, open("all details.txt", "a") as everything: 
    for fline, fineline in zip_longest (f, fine, fillvalue=""): 
      everything.write (fineline.strip() + " --- " + fline.strip() + "\n")  


      a = open("all details.txt", "r") 
      for line in everything:#the problem 
       everything.strip() 
       if line in f1: 
        with ("fine1.txt", "a") as fine1: 
         fine1.write(line) 

これは私のコード全体の一部です。私の全コードは車両登録番号を取り、それが標準であるかどうかをチェックします。速度を計算するために使用される1マイルの移動に要した時間が入力される。ループから追加されたファイルの特定の行を印刷する方法はありますか?

速度が70mphより大きい場合、登録番号と車両が走行していた速度がover_speeding.txtファイルになります。他の条件によって、詳細がどのファイルに反映されるかが決まります(ただし、これは重要ではありません)。

私があなたに示したコードは、fine.txtファイルがすでに設定されている4つのファイルを開き、over_speeding.txtファイルは自分のコード全体からデータを取得します。 all_info.txtファイルは私のコード全体からのすべての入力を保存し、zip_lingestモジュールを使用してall_info.txtファイルはall_details.txtファイルにfine.txtを付け加えます。私は速度超過しているすべてのdetails.txtの行を選択したいもの

、それはfine1.txtする保存

例えば

xxxxxxx 

場合

11111 --- xxxxxxxx 
22222 --- dddddddd 
33333 --- aaaaaaaa 
44444 --- cccccccc 

all_details.txt

xxxxxxxx 
dddddddd 
aaaaaaaa 
cccccccc 

all_info.txt

11111 
22222 
33333 
44444 

fine.txt

aaaaaaa 

10は、すべてのdetails.txtファイルで、ファイルover_speeding.txtからのものであった:

11111 --- xxxxxxxx 
33333 --- aaaaaaaa 

がfine1.txtファイルに保存されなければならない

+0

同じファイルを頻繁に開いたり開いたりすると、問題が発生します。 'すべてのdetails.txt'が2回開かれた後、再び' everything'と呼ばれます。 – usr2564301

+0

どうすればいいですか? – User2434

+0

あなたはそれを解決しましたか?私の答えが満足できない場合は、詳細を提供するか、何が動作しないか教えてください。 – quapka

答えて

1

私が持っていた問題、あなたのコードを理解する(名前それは一部に過ぎないとして

from itertools import zip_longest 
#EDIT why open all_info.txt twice? 
#f = open("all_info.txt", "a") 
with open("all_info.txt", "a") as f,\ 
    open("over_speeding.txt") as f1,\ 
    open("fine.txt") as fine,\ 
    open("all details.txt", "a") as everything,\ 
    open("fine1.txt", "a") as fine1: # moved opening fine1 here 

    for fline, fineline in zip_longest(f, fine, fillvalue=""): 
     #EDIT 
     line_to_write = fineline.strip() + " --- " + fline.strip() # so we don't need to write it twice 
     everything.write(line_to_write + "\n") # write to file with newline 
     if line_to_write in f1: # compare the line with values in over_speeding 
      fine1.write(line_to_write) 

:変数のために)誰かが、少なくとも私にとっては、あなたのコードを読み取ろうとしたとき、本当に便利ではありませんが、私はあなたがそれを行うことが期待何をして、それを書き換えるために試してみました私はそれをテストすることができなかったすべてのデータを持っていません。あなたのアプローチ:すべての行をすべて書き、すべての行を別々にチェックします。私のアプローチ:ラインを取得し、それを書き、同じループでチェックしてください。私があなたのコードを理解していれば、同じことをするはずです。間違いや誤解を尋ねたり指したりしてください。

+0

申し訳ありませんが、このdoesntの仕事を提案していただきありがとうございました。しかし、もしあなたが私のフルコードを表示することができれば、あなたはより良い理解を得るでしょう。 – User2434

+0

そして、私が変えたこと、そしてなぜそれを調整することができるのかを理解しましたか?あなたが望むなら、私にgitのリンクなどを送ることができますし、私は見ていきます。 – quapka

関連する問題