Разбить файл txt на части по поиску

в общем, задача довольно таки не стандартная. Имеется файл, такого вида:

======================================== SAMPLE 1 ========================================

Большой текст...

======================================== SAMPLE 2 ========================================

Большой текст

Ну и так далее, кол-во может быть не ограничено. Суть в том, что бы знаки = были как разделители и всё, что содержится в sample 1 попадало в первый файл, всё, что в sample 2 во второй и тд.

В конце нужно иметь папку, в которой отдельно хранятся файлы txt с информацией.

Т.к. готового решения нет, склоняюсь к python, но я его практически не знаю, подскажите?


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

Автор решения: Alexander Chernin
# открываем и читаем общий большой файл,
# который должен лежать рядом с нашим py-файлом (с этим скриптом)
bigfile = open('mybigfile.txt', 'r') 
lines = bigfile.readlines() 

# данный алгоритм пропустит первые строки файла, 
# если файл не начинается с разделителей
file = None

# Индекс очередного файла
file_index = 1
for line in lines: 
    # Если строка начинается со знаков равно (допустим пяти),
    # то это повод завести себе новый файл
    if line.strip().startwith('====='):
        # Если уже был открыт предыдущий файл, то закрыть его
        if file:
            file.close() 
        # создаем следующий файл 
        file = open('myfile_{}.txt'.format(file_index), 'w') 
        # Обновляем нумератор файлов
        file_index += 1

    # Если файл создан, то пишем в него
    if file:    
        file.writelines(L) 

# Если имеется какой-либо созданный файл, то закрыть его
if file:
    file.close()
→ Ссылка
Автор решения: gil9red

Код:

from pathlib import Path
import re

# Регулярка для поиска строки с названием файла
pattern_file_name = re.compile('={40} (.+?) ={40}')

# Создание папки 'samples'
DIR = Path(__file__).resolve().parent / 'samples'
DIR.mkdir(exist_ok=True)

with open('sample.txt', encoding='utf-8') as f:
    file_name = ''
    file_obj = None
    is_file_header = True

    # Перебор строк файла
    for line in f:
        # Проверка наличия заголовка в файле
        match = pattern_file_name.search(line)
        if match:
            if file_obj:
                file_obj.close()

            # Открытие нового файла
            file_name = DIR / (match.group(1) + '.txt')
            file_obj = open(file_name, 'w', encoding='utf-8')
            is_file_header = True
            continue

        if not file_name:
            continue

        # Запись строки в файл
        if is_file_header and len(line) > 50:
            file_obj.write(line[:50] + '\n' + line[50:])
            is_file_header = False

        else:
            file_obj.write(line)

    if file_obj:
        file_obj.close()


Создал файл sample.txt:

======================================== SAMPLE 1 ========================================
Большой текст...
======================================== SAMPLE 2 ========================================
Большой текст

Результатом будут файлы:

samples/
    SAMPLE 1.txt
    SAMPLE 2.txt

UPD.

Добавлена доработка, которая, при записи первой строки в файл, проверяет, что ее длина не больше 50 символов и в случае превышения, обрезает строку и переносит оставшуюся часть на следующую строку

→ Ссылка