Как разбить файл на части по шаблону? - PullRequest
0 голосов
/ 07 мая 2020

Я собираюсь анализировать текстовые файлы с известной структурой. Прежде чем перейти к решению типа машины Руба-Голдберга, я хотел проверить, существует ли стандартный подход к таким проблемам.

Файловая структура

whatever text, empty lines more text

long text empty lines
whatever
← one empty line
line 1 of final block of text
line 2 of final block of text
line 3 of final block of text
← more lines, the number is not defined
← new line and end of file

Итак, это свободный текст до пустой строки, затем блок из отдельных строк текста без пустых строк и конец файла на новой строке.

Я хотел бы разделить этот файл на две основные части: произвольный текст par и блочная часть. Затем оба будут проанализированы независимо.

Моя первая надежда состоит в том, что будет какой-то модуль «сопоставления шаблонов файлов», в котором я бы описал файл так же, как описано выше, и извлек бы две мои части. Я только что нашел шаблон (а это наоборот: опишите содержимое файла, чтобы его создать).

Следующее решение, которое приходит на ум, - регулярное выражение. Часть, над которой я борюсь, - это описать «блок текста с возвратом только одной строки». Как это можно описать?

И вообще - есть ли более простое решение этой проблемы? (просто указать на это было бы здорово, вероятно, я просто никогда не встречал Этот подход).

Мне кажется, что файл следует анализировать снизу вверх - вероятно, это решение, которое я буду разрабатывать, если не будет более очевидного.

1 Ответ

2 голосов
/ 07 мая 2020

Это работает для меня:

>>> a = '''whatever text, empty lines more text
... 
... long text empty lines
... whatever
... ← one empty line
... line 1 of final block of text
... line 2 of final block of text
... line 3 of final block of text
... ← more lines, the number is not defined
... ← new line and end of file
... '''
>>> a.rsplit('\n\n', 1)
['whatever text, empty lines more text', 'long text empty lines\nwhatever\n\xe2\x86\x90 one empty line\nline 1 of final block of text\nline 2 of final block of text\nline 3 of final block of text\n\xe2\x86\x90 more lines, the number is not defined\n\xe2\x86\x90 new line and end of file\n']
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...