В папке содержаться много тектовых файлов, сравнить их все и убрать дублирующие строки
В папке содержаться много текстовых файлов в каждом из них одинаковая структура. Как решить задачу. Чтобы сравнить все строки убрать дубликаты и выписать результат в отдельный текстовой файл? Сумарный вес всех файлов больше 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'ом нарушает их последовательность, стоит изменить алгоритм если она важна.
- Как указано в скрипте - если это операция будет вызываться не однократно - то создание файла с результатом надо вынести в отдельную функцию, которая создает его если его еще нет.
- Если файлы после записи не нужны - удалить/заархивировать/еще что то.