Сравнение строк в двух файлах для удаления, если они равны [дубликаты]

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

def remove(file, buzz):
    #outer for loop cycles through the buzz file
    for line in buzz:
        #inner for loop cycles through the new file
        for line2 in file:
            if (line==line2):
                file.remove(line2)
            else:
                continue

где файл — это новый файл, который был открыт в main() и передан этому, а buzz — это файл Buzz, который открывается и передается из main().

Раздел удаления не работает и новый файл не меняется.

Какие-либо предложения?


person user131935    schedule 23.09.2016    source источник
comment
Во-первых, файловые объекты не имеют метода remove.   -  person elethan    schedule 23.09.2016
comment
Оба файла содержат одно слово в строке?   -  person Patrick Haugh    schedule 23.09.2016


Ответы (2)


Сначала прочитайте содержимое каждого файла и поместите их в списки:

a_list = open(file_a).read().splitlines()
b_list = open(file_b).read().splitlines()

Затем удалите слова в a_list, которые есть в b_list:

a_list = [word for word in a_list if word not in b_list]

a_list теперь содержит только слова, которых нет в b_list

person Degraw    schedule 23.09.2016
comment
Это будет работать, если каждое слово будет разделено символом новой строки, иначе a_list будет содержать строки слов, которых нет в b_list. - person Ted Klein Bergman; 23.09.2016
comment
Да, это предполагает одно слово в строке. - person Degraw; 24.09.2016

Откройте и поместите данные файла в списки:

file_data = [line.strip() for line in open(file)]
buzz_data = [line.strip() for line in open(buzz)]

Затем отфильтруйте слова:

new = [line for line in file_data if line not in buzz_data]

Наконец, запишите новые данные в файл:

with open(file,"w") as f:
    for i in new:
        f.write(i+"\n")
f.close()
person Advay Pakhale    schedule 23.09.2016