Сравнить строку в двух разных файлах 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)