#python #file #compare
Вопрос:
У меня есть два входных файла:
one.txt: а а а а а б б б б б б
two.txt b b b c b a a c a a b
У меня есть следующий код:
with open('two.txt', 'r') as file1: with open('one.txt', 'r') as file2: difference = set(file1).difference(file2) difference.discard('n') with open('difff.txt', 'w') as file_out: for line in difference: file_out.write(line)
И я получаю результат в виде:
c
Но я хочу иметь что-то вроде:
c
c
Может ли кто-нибудь помочь мне в решении этой проблемы?
Комментарии:
1. Преобразование в наборы дает вам только
set(file1) = {'a', 'b'}
иset(file2) = {'a', 'b', 'c'}
. Вот почему вы получаете'c'
его в качестве выходного. Вы можете получить заданную разницу (которая у вас есть), а затем выполнить итерацию вfile2
виде списка элементов в файле и распечатывать или сохранять в переменной каждый раз, когда вы видите элемент из заданной разницы.2. Пожалуйста, опишите, что вы хотите сделать на простом английском языке, только затем покажите вам код. В текущем вопросе мы не можем определить, должны ли первые строки (a для text1, b для text2) быть в результате. Мы также не можем знать, является ли в случае следующих двух файлов («a a», «a a a») ожидаемым результатом «a» или «».
Ответ №1:
С помощью collections.Counter
:
with open('one.txt') as f1, open('two.txt') as f2: one = Counter(f1.read().split()) two = Counter(f2.read().split()) with open('diff.txt', 'w') as outfile: for c, i in (two - one).items(): outfile.write(f'{c}n' * i)