2015-10-13 3 views
0

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

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

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

Пример

Файл 1:

customerID: aa 
companyName: AA 
contacts: AAAA AAAA <[email protected]> 

Файл 2:

customerID: zz 
username: z.z 
contacts: ZZZ ZZZ <[email protected]> 

Мне нужно найти, если CUSTOMERID тот же

Вот мой код:

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, который я создал таким образом самостоятельно.

+0

Пробовали ли вы использовать регулярное выражение для извлечения информации о клиентах из обоих файлов и сравнить их? – maccinza

+0

Я не уверен, что вы хотите сделать. Вы хотите проверить, присутствуют ли все кастермиды из первого файла во втором файле? –

+0

Я хочу проверить, является ли идентификатор customerID в двух файлах одинаковым и только печатать те, которые не являются – CRC

ответ

0
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> 
+0

Да, я пробовал, что это не работает должным образом, как я тоже хотел. – CRC

+0

Можете ли вы рассказать мне о своей проблеме, с которой вы столкнулись, когда вы ее попробовали. – Sanch

+0

я не сталкивался никакой технической проблемы только, что, когда я использовал этот метод, он напечатанный так: CUSTOMERID: ZZZ CUSTOMERID: WWWW CUSTOMERID: XXXX И мне нужно только иметь значение CUSTOMERID для сравнения между два файла – CRC

0

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

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) 
Смежные вопросы