ОК ребята /gals снова застряли на чем-то простом
У меня есть текстовый файл с несколькими строками на запись, данные в следующем формате
слово слово слово слово
wordx слово слово слово интересный1 слово слово слово слово
Слово слово слово слово
слово слово слово слово интересно2 слово слово слово слово
эта последовательность повторяется сотню раз, все остальные слова одинаковы, кроме интересных1 и интересных2, без пустых строк. Интересное2 уместно для интересного1, но ни для чего другого, и я хочу связать два интересных предмета вместе, отбросив остальных, например
interesting1 = interesting2
interesting1 = interesting2
interesting1 = interesting2
и т.д., 1 lne per sequence
Каждая строка начинается с другого слова
моя попытка состояла в том, чтобы прочитать файл и выполнить оператор "if wordx in line", чтобы идентифицировать первую интересную строку, отрезать значение, найти вторую строку ( "если wordz в строке" ) срезать значение и объединить второе с первый.
Это было неуклюже, хотя я должен был использовать глобальные переменные, временные переменные и т.д., И я уверен, что должен быть способ определить диапазон между первым словом и словом и помещать его в один список, а затем вырезать оба значения вместе.
Любые предложения с благодарностью признаны, спасибо за ваше время
from itertools import izip, tee, islice
i1, i2 = tee(open("foo.txt"))
for line2, line4 in izip(islice(i1,1, None, 4), islice(i2, 3, None, 4)) :
print line2.split(" ")[4], "=", line4.split(" ")[4]
В этом случае создайте регулярное выражение, которое соответствует повторяющемуся тексту, и имеет группы для интересных битов. Затем вы сможете использовать findall для поиска всех интересных и интересных интересных случаев.
Так же: import re
text = open("foo.txt").read()
RE = re.compile('firstword.*?wordx word word word (.*?) word.*?wordz word word word (.*?) word', re.DOTALL)
print RE.findall(text)
Хотя, как упоминалось в комментариях, islice определенно является более аккуратным решением.
Я бросил в сумку утверждения, чтобы проверить правильность расположения ваших данных.
C:\SO>type words.py
# sample pseudo-file contents
guff = """\
firstword word word word
wordx word word word interesting1-1 word word word word
wordy word word word
wordz word word word interesting2-1 word word word lastword
miscellaneous rubbish
firstword word word word
wordx word word word interesting1-2 word word word word
wordy word word word
wordz word word word interesting2-2 word word word lastword
firstword word word word
wordx word word word interesting1-3 word word word word
wordy word word word
wordz word word word interesting2-3 word word word lastword
"""
# change the RHS of each of these to reflect reality
FIRSTWORD = 'firstword'
WORDX = 'wordx'
WORDY = 'wordy'
WORDZ = 'wordz'
LASTWORD = 'lastword'
from StringIO import StringIO
f = StringIO(guff)
while True:
a = f.readline()
if not a: break # end of file
a = a.split()
if not a: continue # empty line
if a[0] != FIRSTWORD: continue # skip extraneous matter
assert len(a) == 4
b = f.readline().split(); assert len(b) == 9
c = f.readline().split(); assert len(c) == 4
d = f.readline().split(); assert len(d) == 9
assert a[0] == FIRSTWORD
assert b[0] == WORDX
assert c[0] == WORDY
assert d[0] == WORDZ
assert d[-1] == LASTWORD
print b[4], d[4]
C:\SO>\python26\python words.py
interesting1-1 interesting2-1
interesting1-2 interesting2-2
interesting1-3 interesting2-3
C:\SO>