Если текст, находящийся внутри файла 1, который также находится внутри файла 2, записать в новый файл без дубликатов. - PullRequest
0 голосов
/ 21 июня 2020

file.txt file2.txt

Я пытаюсь создать сценарий Python, который будет делать следующее:

Читать file.txt и file2.txt Если есть что-то который находится внутри file.txt, который также находится внутри file2.txt, удалите его из file.txt

Это то, что я сделал:

file1 = open('file.txt', 'r').readlines()
file2 = open('file2.txt', 'r').readlines()
Removed = open('Removed.txt', 'a')
for line in file2:
    if line not in file1:
        Removed.write(str(line) + '\n')
Removed.close()

Он просто удалил его из file2.txt

Ответы [ 3 ]

1 голос
/ 21 июня 2020

Если вам не важен порядок строк в file.txt после очистки повторяющихся данных, вы можете использовать установить разницу между двумя строками файла (после преобразования их в set объекты). Попробуйте следующее:

with open('f1.txt') as f1, open('f2.txt') as f2:
    f1_lines = set(f1.read().splitlines())
    f2_lines = set(f2.read().splitlines())

new_data = f1_lines - f2_lines

with open('f1.txt', 'w') as f1:
    f1.write("\n".join(new_data))
0 голосов
/ 21 июня 2020

Это то, что вы ищете ... он также сохраняет порядок строк:

with open('file.txt') as f1, open('file2.txt') as f2:
    file1_lines = (f1.read().splitlines())
    file2_lines = (f2.read().splitlines())

for line in file1_lines:
    if line in file2_lines:
        file1_lines.remove(line)
    
with open('Removed.txt', 'w') as f3:
    f3.write("\n".join(file1_lines))

, чтобы проверить, есть ли что-то внутри файла file.txt, которое также находится внутри файла file2.txt, создайте новый файл с именем, например, deleted.txt, и напишите все внутри файла file1, но если есть что-то внутри file2, удалите его из file1 и запишите в новый файл - @ Zenzureal

0 голосов
/ 21 июня 2020

Код у вас в порядке, но он будет очень медленным. Строка if line not in file1: будет выполнять линейное сканирование списка для каждой строки в file2. Если вы сделаете набор, все будет go намного быстрее, потому что наборы не должны выполнять линейное сканирование.

file1 = set(open('file.txt', 'r').readlines())

Вы также захотите закрыть файлы после того, как прочитаете их, или еще лучше используйте оператор with, чтобы они автоматически закрывались.

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