Как извлечь информацию из двух уникальных слов в большой текстовый файл - PullRequest
16 голосов
/ 10 февраля 2012

У меня около 150 текстовых файлов, заполненных символьной информацией.Каждый файл содержит два уникальных слова () альфа и браво, и я хочу извлечь текст между этими уникальными словами и записать его в другой файл.

Вручную я могу нажать CTRL + F для двух слов и скопировать текст между ними, я просто хочу знать, как это сделать, используя программу (предпочтительно Python) для многих файлов.

Ответы [ 4 ]

33 голосов
/ 10 февраля 2012

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

>>> st = "alpha here is my text bravo"
>>> import re
>>> re.findall(r'alpha(.*?)bravo',st)
[' here is my text ']

Мой файл test.txt

alpha here is my line
yipee
bravo

Теперь с помощью открыть дляпрочитайте файл и затем примените regular expressions.

>>> f = open('test.txt','r')
>>> data = f.read()
>>> x = re.findall(r'alpha(.*?)bravo',data,re.DOTALL)
>>> x
[' here is my line\nyipee\n']
>>> "".join(x).replace('\n',' ')
' here is my line yipee '
>>>
11 голосов
/ 10 февраля 2012
a = 'alpha'
b = 'bravo'
text = 'from alpha all the way to bravo and beyond.'

text.split(a)[-1].split(b)[0]
# ' all the way to '
7 голосов
/ 10 февраля 2012

str.find и его брат rfind имеют start и end args.

alpha = 'qawsed'
bravo = 'azsxdc'
startpos = text.find(alpha) + len(alpha)
endpos = text.find(bravo, startpos)
do_something_with(text[startpos:endpos]

Это самый быстрый способ, если содержащийся текст короткий и находится спереди.

Если содержащийся текст относительно велик, используйте:

startpos = text.find(alpha) + len(alpha)
endpos = text.rfind(bravo)

Если содержащийся текст короткий и ближе к концу, используйте:

endpos = text.rfind(bravo)
startpos = text.rfind(alpha, 0, endpos - len(alpha)) + len(alpha)

Первый метод в любомдело лучше, чем наивный метод начала второго поиска с начала текста;используйте его, если у вашего текста нет доминирующего шаблона.

2 голосов
/ 10 февраля 2012

Вместо использования регулярного выражения используйте метод Python string.find.

>>>> unique_word_a = 'alpha'
>>>> unique_word_b = 'bravo'
>>>> s = 'blah blah alpha i am a good boy bravo blah blah'
>>>> your_string = s[s.find(unique_word_a)+len(unique_word_a):s.find(unique_word_b)].strip()
i am a good boy
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...