Сравнить строку в двух разных файлах python

Мне нужна ваша помощь, потому что после долгих исследований я не нашел подходящего ответа на свои проблемы.

У меня есть 2 файла, которые содержат некоторую информацию. Некоторые из этой информации похожи другие отличаются. Первый файл отсортирован, второй нет.

Я пытался использовать difflib, но, по-видимому, в моем случае это не работает.

пример

Файл 1:

customerID: aa
companyName: AA
contacts: AAAA AAAA <aa@aa.fr>

Файл 2:

customerID: zz
username: z.z
contacts: ZZZ ZZZ <zz@zz.com>

Мне нужно выяснить, совпадает ли идентификатор клиента

Вот мой код:

import sys
import string
import difflib                                               

def changes(file1, file2):
    # opening the 2 files which we need to compare                                 
    master = open(file1, 'r')
    slave = open(file2, 'r')

    # searching diff                                                               
    diff = difflib.unified_diff(master.readlines(),slave.readlines())
    t = ''.join(diff)
    print (t)




def main(argv=2):
    print (sys.argv[1])
    print (sys.argv[2])
    if argv == 2:
        changes(sys.argv[1], sys.argv[2])
    else:
        print ("This program need 2 files")
        exit (0)
    return 0

    if __name__ == '__main__':
   status = main()
   sys.exit(status)

Изменить: файл TXT, который я сам сформировал, как это.

2 ответа

Решение
with open('first.txt', 'r') as first_file:
   for line in first_file:
       data = line.split(":")
       if data[0].trim() == "customerID":
          customer_id  = data[1].trim()
          with open('second.txt', 'r') as second_file:
            for second_file_line in second_file:
            data2 = line.split(":")
            if data2[0].trim() == "customerID":
              if customer_id == data2[1].trim():
                <do your work>

Если ваши файлы слишком большие, тогда поиск во втором файле

with open('second.txt', 'r') as second_file:
for line in second_file:
    if customer_id in line:
       <do your work>

или если файлы достаточно малы, то

if customer_id in open('second.txt').read():
      <do your work>

Спасибо всем вам за ваш ответ, он мне очень помог, и я смог найти решение вот оно:

def isInFile(l, f):
    with open(f, 'r') as f2:
        for line in f2:
            if l == line:
                return True
        return False

def similitudes(file1, file2):
    same = 0
    data = ''
    copy = False
    with open(file1, 'r') as f1:
        for line in f1:
            if copy == True:
               # data += line
                if line == '\n' or line[0:10] != 'customerID':
                    copy = False
            if (line[0:10] == 'customerID'):
                if isInFile(line, file2) == True:
                    copy = True
                    data += line
                else:
                    same += 1
    return data              

def changes(file1, file2):
    same = 0
    data = ''
    copy = False
    with open(file1, 'r') as f1:
        for line in f1:
            if copy == True:
                data += line
                if line == '\n' or line[0:10] != 'customerID' or line[0:8] != 'contacts':
                    copy = False
            if line[0:10] == 'customerID' or line[0:8] == 'contacts':
                if isInFile(line, file2) == False:
                    copy = True
                    data += line
                else:
                    same += 1
    return data

def main(argv=2):
    print (sys.argv[1])
    print (sys.argv[2])
    if argv == 2:
        out = open('differences.txt', 'w')
        data = (time.strftime('%d/%m/%y %H:%M')+'\n' +
                'FROM: ' + sys.argv[1] + '\n' +
                changes(sys.argv[1], sys.argv[2]) +
                'FROM: ' + sys.argv[2] + '\n' + 
                changes(sys.argv[2], sys.argv[1]) + '\n')
        out.write(data)
        out.close()

        out = open('similitudes.txt', 'w')
        data = (time.strftime('%d/%m/%y %H:%M\n')+
                'FROM: ' + sys.argv[1] + ' and ' + sys.argv[2] + '\n' +
                similitudes(sys.argv[1], sys.argv[2]) + '\n' + 
                'FROM: ' + sys.argv[2] + ' and ' + sys.argv[1] + '\n' +
                similitudes(sys.argv[2], sys.argv[1]))
        out.write(data)
        out.close()
    else:
        print ("This program need 2 files")
        exit (0)
    return 0

if __name__ == '__main__':
   status = main()
   sys.exit(status)
Другие вопросы по тегам