2016-04-17 3 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 мили, которое используется для расчета скорости.Как напечатать определенные строки в файле, который был добавлен из цикла?

Если скорость больше 70 миль в час, регистрационный номер и скорость движения транспортного средства идет в файл over_speeding.txt. то другие условия определяют, в каком файле идут данные (но это не важно).

Код, который я показал, откроет 4 файла, где файл fine.txt уже установлен, а файлы over_speeding.txt получают свои данные из всего моего кода. Файл all_info.txt будет хранить все входы из моего всего кода, а затем использовать файл zip_lingest all_info.txt файл добавляется с файлом fine.txt to all_details.txt.

то, что я хочу просто, чтобы выбрать строки во всех details.txt, которые превышение скорости, а затем сохранить его в fine1.txt

например fine.txt

11111 
22222 
33333 
44444 

all_info.txt

xxxxxxxx 
dddddddd 
aaaaaaaa 
cccccccc 

all_details.txt

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

если

xxxxxxx 

и

aaaaaaa 

были из файла over_speeding.txt, то в всех details.txt файле:

11111 --- xxxxxxxx 
33333 --- aaaaaaaa 

должны быть сохранены в файл fine1.txt

+0

Ваше постоянное открытие и повторное открытие одних и тех же файлов приводит к проблемам. 'all details.txt' открывается дважды, и вы снова называете его« все ». – 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

извините, это не работает. но если я хочу, чтобы я мог показать вам мой полный код, тогда вы получите лучшее понимание. – User2434

+0

И вы поняли, что я изменил и почему (возможно, вы могли бы его отрегулировать, простая копия и вставка не будут работать)? Если вы хотите, вы можете отправить мне ссылку git или что-то в этом роде, и я посмотрю. – quapka

 Смежные вопросы

  • Нет связанных вопросов^_^