Найти строку в файле и копировать, пока в Python не появится определенный символ - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть несколько файлов .txt с информацией, которая выглядит после преобразования:

    >  **   ** **|** **     STYLE #        ** **|** **   DESCR  :  Potrero415;Tbl-
Rnd                 ** **\--------** **         ** **\--** **ZONE  1** **\--**
**           ** **\--** **ZONE  2** **\--** **      ** **\----** **      -T1-
-T2-  -T3-


                ** 

Я хочу захватить все с DESCR: до следующей строки, где он начинается ** **\--** ** ZONE 2 ** поэтому моя строка должна выглядеть так: DESCR : Potrero415;Tbl-Rnd Обратите внимание, что в файле перед этой конкретной частью есть несколько строк текста, и слово DESCR появляется только там, где я хочу скопировать, а других появлений раньше не было.

Я знаю, что разделение может использоваться до появления ** **\ Все файлы имеют одинаковый формат, просто нужно найти от DESCR: до ** **

Я знаю, что рискую получить отрицательные отзывы на этот пост. ОБНОВИТЬ: Мне удалось найти появления слова, используя:

lines = test.readlines()
test.close()
for line in lines:
    line = line.strip()
    if line.find("DESCR") != -1:
        print("FOUND")

где test - это файл, который у меня открыт

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Вы можете использовать регулярные выражения

import re

match = re.search('(?=DESCR).*?(?=\*\*)', your_txt)
print(match.group(0))

Будет выводить:

DESCR: Potrero415; Tbl-Rnd

Regex Demo с вашей тестовой строкой

Где:

Positive Lookahead (?=DESCR)
Assert that the Regex below matches
DESCR matches the characters DESCR literally (case sensitive)
.*? matches any character 
*? Quantifier — Matches between zero and unlimited times, as few times as possible, expanding as needed (lazy)
Positive Lookahead (?=\*\*)
Assert that the Regex below matches
\* matches the character * literally (case sensitive)
\* matches the character * literally (case sensitive)
Global pattern flags
s modifier: single line. Dot matches newline characters  
0 голосов
/ 06 сентября 2018

Звучит как работа для регулярных выражений.

s - это содержимое вашего файла.

>>> import re
>>> s = '''    >  **   ** **|** **     STYLE #        ** **|** **   DESCR  :  Potrero415;Tbl-
... Rnd                 ** **\--------** **         ** **\--** **ZONE  1** **\--**
... **           ** **\--** **ZONE  2** **\--** **      ** **\----** **      -T1-
... -T2-  -T3-
... 
... 
...                 ** '''
>>> 
>>> re.search('(DESCR\s*:.*?)\s*\*\* \*\*', s, re.DOTALL).group(1)
'DESCR  :  Potrero415;Tbl-\nRnd'

Демонстрация на regex101

(Добавление к регулярному выражению (? S) имеет тот же эффект, что и аргумент re.DOTALL.)

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