2015-04-14 5 views
1

У меня есть 2 файла: file1, file2. file2 содержит все файлы file1 и многие другие. Пример:Как сравнить два файла и извлечь некоторые данные с Python

file1: 
data1/111 
data2/222 
data3/333 

file2: 
data1/111 \ewr\xcgf\wer 54645623456.xml 
data23/42234 \asdqw\aqerf 23525.xml 
data2/222 \asd\qwe 234234.xml 
data66/2331 \a53\fdf355 12312333311.xml 
data3/333 \from\where 123123.xml 
data4/444 \xcv\sdf\ghf 98546.xml 
and MANY more... 

Итак, я пытаюсь распечатать строки, которые существуют в обоих файлах, но из файла2. Это означает, что распечатка должна содержать дополнительные данные в каждой строке. Как путь и имя файла XML.

Я пробовал;

lines1 = open(path1).readlines() 
lines2 = open(path2).readlines() 

for i in lines1: 
    for j in lines2: 
     if i in j: 
      print(j.rstrip()) 

Это печатает все строки на lines2, но то, что я пытаюсь выяснить, есть; выполните поиск в первой строке от lines1 в lines2 и если найдете ее где-нибудь в lines2, распечатайте эту строку от lines2, так далее. Поэтому после этого он должен сделать то же самое для второй строки в lines1

Может ли кто-нибудь помочь?

Спасибо за ваше время.

+0

Используйте .readlines() вместо .read(). Split() – gWiz

ответ

0

у меня есть решение для перекрестной проверки;

lines1 = open(path1).readlines() 
lines2 = open(path2).readlines() 

for i in lines1: 
    for j in lines2: 
     if j.startswith(i.rstrip()): 
      print(j.rstrip()) 
      break 

Что это делает: поиск 1 линия от lines1 против всех линий от lines2. break предотвращает дублирование

1
lines1 = open(path1).readlines() 
lines2 = open(path2).readlines() 

for l1 in lines1: 
    if l1 in lines2: 
     print(l1) 

Или, используя список понимание:

lines1 = open(path1).readlines() 
lines2 = open(path2).readlines() 
print([line for line in lines1 if line in lines2]) 
+0

оба кода дают нулевые результаты. – Leustad

+0

@Leustad: Сообщение было отредактировано, пока вы комментировали, это была опечатка. – Joe

1

Вопрос не совсем понятно, но если вы знаете, что одни и те же линии, но с большим количеством данных, в некоторых случаях для file2, вы можете просто сделать следуя за О (п) решение:

lines1 = open(path1).readlines() 
lines2 = open(path2).readlines() 

for line1, line2 in zip(lines1, lines2): 
    if line1 != line2: 
     print line2.rstrip() 
+0

Это хорошее решение, если вы хотите, чтобы позиции линий соблюдались (строка 4 и строка 3 не будут считаться равными, даже если они идентичны) – Joe

+0

Я думаю, что это работает, но я понятия не имею, почему пустая строка между отпечатками. – Leustad

+0

Поскольку readlines не разделяет конечную новую строку. Попробуйте сейчас –