Удаление строк во время сравнения файлов без удаления номеров строк или добавления новых пустых строк - PullRequest
0 голосов
/ 15 февраля 2019

file2 имеет большой список чисел.Файл1 имеет небольшой список номеров.file2 является дубликатом некоторых чисел в file1.Я хочу удалить дубликаты номеров в файле2 из файла1, не удаляя никакие данные из файла2, но в то же время не удаляя номер строки в файле1.Я использую PyCharm IDE, и это назначает номер строки.Этот код удаляет дубликаты данных из файла file1 и не удаляет данные из файла file2.Это то, что я хочу, однако это удаление дубликатов и строк и их переключение в file1, что я не хочу делать.

import fileinput

# small file2
with open('file2.txt') as fin:
    exclude = set(line.rstrip() for line in fin)
# big file1
    for line in fileinput.input('file1.txt', inplace=True):
        if line.rstrip() not in exclude:
            print(line)

Пример: того, что происходит, file2 34344

файл-1 при запуске:
54545
34344
23232
78787

конец файла-1:
54545
23232
78787

Что я хочу.

начало файла-1:
54545
34344
23232
78787

конец файла-1:
54545

23232
78787

1 Ответ

0 голосов
/ 18 февраля 2019

Вам просто нужно напечатать пустую строку, когда вы найдете данные, которые находятся в наборе exclude.

import fileinput

# small file2
with open('file2.txt') as fin:
    exclude = set(line.rstrip() for line in fin)
# big file1
    for line in fileinput.input('file1.txt', inplace=True):
        if line.rstrip() not in exclude:
            print(line, end='')
        else:
            print('')    

Если file1.txt:

54545
1313
23232
13551

И file2.txt:

1313
13551

После запуска сценария перед file1.txt становится:

54545

23232

Небольшое замечание по эффективности

Как вы сказали,этот код фактически переписывает все строки, отредактированные и нет.Удалить и переписать только несколько строк в середине файла непросто, и в любом случае я не уверен, что это будет более эффективно в вашем случае, так как вы не знаете a priori , какие строки должны бытьотредактировано: вам всегда нужно будет читать и обрабатывать весь файл построчно, чтобы узнать, какие строки нужно отредактировать.Насколько я знаю, вы вряд ли найдете решение, действительно более эффективное, чем это.Рад, что отрицают, если кто-нибудь знает, как.

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