При написании кода вы должны иметь в виду именно то, что вы ожидаете, что каждая переменная будет содержать на каждом этапе выполнения вашей программы.Например, это:
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
».