Попытка извлечь полезные информационные блоки из текстового файла - PullRequest
3 голосов
/ 20 июля 2011

Я пытаюсь извлечь все вхождения определенной таблицы из текстового файла, используя кусочки строк, но он продолжает вытягивать первый кусочек снова и снова.

Возможно, мне нужна фиктивная переменнаядля начального и конечного отсчетов?

result = ''  
start = 'start of stuff I want'  
end = 'end of stuff I want'  
otn = o.read()  
count = otn.count(start)  
s = 0  
e = 0  
for i in range(count):  
    s = otn.find(start, s)  
    e = otn.find(end, s)  
    result = result + otn[s:e]  
print(result)  

Любой совет?

Ответы [ 3 ]

2 голосов
/ 20 июля 2011

Попробуй это. Это больше python-у и многоразового использования:

def extract_delimited_data(data, begin_delimiter, end_delimiter):
    s = data.find(begin_delimiter)

    while s != -1:
        e = data.find(end_delimiter, s + len(begin_delimiter))

        s += len(begin_delimiter)
        yield data[s:e]

        s = data.find(begin_delimiter, e + len(end_delimiter))

data = 'foo<bar>hello<world>'

print list(extract_delimited_data(data, '<', '>'))

Выходы:

['bar', 'world']
1 голос
/ 20 июля 2011

Я считаю, что вторым параметром для поиска должно быть s + 1. find найдет вещи по или после заданного индекса, поэтому, если данный индекс указывает на совпадение, он просто найдет его снова.

Поэтому начальное значение s должно быть -1.

0 голосов
/ 20 июля 2011

Я думаю, что вы имеете в виду

for i in range(count):  
    s = otn.find(start, e)  #start looking after the end of the previous data
    e = otn.find(end, s)    #start looking after the above beginning
    result = result + otn[s:e] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...