Есть ли способ поиска слов из одного файла в другом файле и вывода слов, не найденных в другом файле, в новый файл? - PullRequest
1 голос
/ 06 июня 2019

Я пытаюсь сравнить два файла в Python, которые оба содержат несколько слов.Я хотел бы, чтобы код искал слова из файла1 в файле2 и поместил слова, которые не найдены в файле1, в новый файл в качестве вывода.

Код, приведенный ниже, - это то, что я пробовал, но это не так.ничего не делатьЭто даже не показывает ошибку, поэтому я не знаю, что идет не так или должно быть по-другому.

file1 = open('C:/Users/Atal/Desktop/School/Project datas/file1.txt')
file2 = open('C:/Users/Atal/Desktop/School/Project datas/file2.txt')

fileContent = file1.read();
fileContent2 = file2.read();

loglist = file1.readlines()

loglist2 = file2.readlines()
file2.close()

line = file1.readline()
file1.close()

found = False
for line in loglist:
if line in loglist2 :
    found = True

if not found:
file1 = open('C:/Users/Atal/Desktop/School/Project datas/file1.txt', 'w')
file1.write(line +"\n")
file1.close()

file1 выглядит так: Peter Jan Richard

file2 выглядит так: Флойд Ричард Боб

Новый файл должен выглядеть следующим образом: Питер Ян

Если есть способ сделать это, пожалуйста, дайте мне знать.Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 06 июня 2019

При написании кода вы должны иметь в виду именно то, что вы ожидаете, что каждая переменная будет содержать на каждом этапе выполнения вашей программы.Например, это:

loglist = file1.readlines()
...
line = file1.readline()
...
for line in loglist:

зачем вообще нужно это среднее утверждение, если вы просто собираетесь немедленно перезаписать line?И внутри вашего for цикла:

for line in loglist:
    if line in loglist2:
        found = True

if not found:
    # save new file

Итак, если в loglist2 найдена строка из loglist, тогда установите для переменной found значение Trueесли этого не произошло (если found остается False), то выводить в файл1.Обратите внимание, что вы ничего не делаете с line, и даже если бы вы это делали, строка file1.write(line +"\n") всегда выводит только одну строку и никогда не повторяется с другими строками (или я предполагаю, что вы сделали отступ в кодеВаш вопрос).


Итак, вот как вы бы сделали это более правильно.Читая это, обратите внимание на то, какой тип (строка, список и т. Д.) Имеет каждая переменная, когда она используется:

with open(".../file1.txt", "r") as file1, open(".../file2.txt", "r") as file2:
    logList1 = file1.readlines()
    logList2 = file2.readlines()
    # the with block will close the files automatically

for line in logList1:
    if line in logList2: 
        logList2.remove(line)  # if the line from file1 is found in file2, remove that line from file2

with open(".../file3.txt", "w") as file3:
    file3.writelines(logList2)  # write the contents of file2, after we removed lines from file1 from it

@ johnny1995, в своем ответе, сделал средний шаг в понимании списка:

logList3 = [line for line in logList2 if line not in logList1]

, что по сути является сокращением для того, что я сделал выше: «создайте новый список, содержащий каждую строку из logList2, но только если эта строка не появляется в logList1».

1 голос
/ 06 июня 2019

Используйте набор и не так:

list_1 = ['Peter', 'Jan', 'Richard']
list_2 = ['Floyd', 'Richard', 'Bob'] 

set_2 = set(list_2)  
main_list = [item for item in list_1 if item not in set_2]

main_list

Вывод:

['Peter', 'Jan']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...