2017-02-15 2 views
0

У меня есть 2 файла.Как петли и сравнивать пары линий?

Файл 1

e 1 0 ppp 
e 3 1 rrr 
e 3 2 rrr 

Файл 2

e 1 0 rrr 

Я хочу, чтобы разделить каждую строку кода, чтобы сравнить массив [3] он должен напечатать OK если же ррр в строке. Я пишу такой код.

file1 = open('file1.txt', 'r', encoding="utf8") 
file2 = open('file2.txt', 'r') 

for line1 in file1:  #loop file1 

    L1 = line1.split() #split to array 

    if(L1[0] == 'e'): 
     print("line1 " + line1) 

     for line2 in file2: #loop file2 

      L2 = line2.split() #split to array 

      if(L2[0] == 'e'): 
       print("line2 " + line2) 

       if(L2[3] == L1[3]): #check rrr same 

        print("OK") 

когда я запускаю код печатает это:

line1 e 1 0 ppp 
line2 e 1 0 rrr 
line1 e 3 1 rrr 
line1 e 3 2 rrr 

Код петля в петле, я хочу показать результат, как этот:

line1 e 1 0 ppp 
line2 e 1 0 rrr 
line1 e 3 1 rrr 
line2 e 1 0 rrr 
line1 e 3 2 rrr 
line2 e 1 0 rrr 

Как изменить код для сравнения каждая строка файла?

+3

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

ответ

0

В основном вам нужно отслеживать последнюю строку из обоих файлов. если какой-либо из файлов меньше и заканчивает итерацию перед другим. вам нужно сравнить текущую строку с предыдущей строкой из другого файла.

как насчет этого?

prev_f1_token = None 
prev_f1_line = None 

prev_f2_token = None 
prev_f2_line = None 

with open('file1.txt') as f1: 
    with open('file2.txt') as f2: 
     for line in f1: 
      prev_f1_token = line[0] 
      prev_f1_line = line 
      for line in f2: 
       prev_f2_token = line[0] 
       prev_f2_line = line 

      if(prev_f1_token == 'e'): 
       print("line1 ", prev_f1_line) 

      if (prev_f2_token == 'e'): 
       print ("line2 ", prev_f2_line) 

       if(prev_f2_line.split()[3] == prev_f1_line.split()[3]): #check rrr same 
         print("OK") 
0

Вы пишете путь много кода, чем требуется, и его не всегда хорошая идея, чтобы продолжить работу, если ваш код становится, что гораздо отступом. Это моя попытка напечатать то, что вы хотите, и я уверен, что это может быть сокращено больше!

Вы можете использовать itertools.cycle здесь (она возвращает циклический итератор в случае более короткого списка) объекты

import itertools 
f1, f2 = open('file1.txt', 'r'), open('file2.txt', 'r') 
file1, file2 = f1.read().split(), f2.read().split() 
if len(file1) > len(file2): 
    file2 = itertools.cycle(file2) 
else: 
    file1 = itertools.cycle(file1) 
print '\n'.join(['line1 '+i+'\nline2 '+j for i,j in zip(file1, file2)]) 
f1.close();f2.close() 
Смежные вопросы