В папке содержаться много тектовых файлов, сравнить их все и убрать дублирующие строки

В папке содержаться много текстовых файлов в каждом из них одинаковая структура. Как решить задачу. Чтобы сравнить все строки убрать дубликаты и выписать результат в отдельный текстовой файл? Сумарный вес всех файлов больше 8 Гб обычно. Желателен python 3, но можно с использованием python 2.

...
1.txt
232412.txt
3file.txt
fikg4.txt 
...

"
...
username='fwtarget' phone=None  last_name='Федоров' first_name='Владислав'  status=UserStatusOffline(was_online=datetime.datetime(2020  12  12  photo=UserProfilePhoto(photo_id=3857282417864845225 
username='Tat_ust_target'   phone=None  last_name='Уставщикова' first_name='Татьяна'    status=UserStatusOffline(was_online=datetime.datetime(2020  12  12  photo=UserProfilePhoto(photo_id=4001195596448901042 
...."

Ответы (2 шт):

Автор решения: Sky

Прочитать можете довольно просто через модуль glob

import glob
list = glob.glob('./*.txt')

Сможете пошучить список всех файлов. А дальше думаю не составит труда их открыть и с помощью pandas проводить с ними что угодно

→ Ссылка
Автор решения: asanisimov
import os


def get_txt_files(dir_: str):
    """получить все .txt файлы директории"""
    return [dir_ + '/ '+ file for file in os.listdir(dir_) if file[-4:] == '.txt']


dir_ = '/ваша/директория'
files = get_txt_files(dir_)
# заранее создаем файл с результатом 
# Если будет обновляться, то надо предусмотреть 1 создание если файла еще не существует
res_file = dir_ + '/' + 'res.txt'
with open(res_file, 'w'):
    pass

for file in files:
    with open('qwe.txt', 'r') as f:
        # сразу устраняем дублирующие строки
        data = set(f.readlines())
    with open(res_file, 'r+') as f2:
        # 
        dt = set(f2.readlines())
        res = list(data - dt)
        f2.writelines(res)

Что тут можно доработать:

  • Для скорость модно обрабатывать все параллельно, но надо будет предусмотреть одновременный доступ к результирующему файлу.
  • Я не учел что файл может заканчиваться без переноса строки '/n', тогда следующий файл при записи будет писаться вплотную.
  • Устранение дублирующих строк set'ом нарушает их последовательность, стоит изменить алгоритм если она важна.
  • Как указано в скрипте - если это операция будет вызываться не однократно - то создание файла с результатом надо вынести в отдельную функцию, которая создает его если его еще нет.
  • Если файлы после записи не нужны - удалить/заархивировать/еще что то.
→ Ссылка