как получить строки по блокам - PullRequest
0 голосов
/ 04 ноября 2011

Довольно простой вопрос ниже

Из приведенного ниже кода «данные» состоят из столбца чисел, скажем, 12 цифр (см. Ниже)

def block_generator():
with open ('test', 'r') as lines:
    data = lines.readlines ()[5::]
    for line in data:
        if not line.startswith ("          "): # this actually gives me the column of 12 numbers
            block = # how to get blocks of 4 lines???
            yield block

print line
56.71739
56.67950
56.65762
56.63320
56.61648
56.60323
56.63215
56.74365
56.98378
57.34681
57.78903
58.27959

Как создать блокииз четырех чисел?Например

56.71739
56.67950
56.65762
56.63320

56.61648
56.60323
56.63215
56.74365

и так далее ... потому что мне нужно обработать все блоки.

Спасибо за чтение

1 Ответ

2 голосов
/ 04 ноября 2011

модуль itertools предоставляет рецепт, который делает именно то, что вам нужно:

from itertools import izip_longest

def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

, который выглядит так:

>>> corpus = (56.71739, 56.67950, 56.65762, 56.63320, 56.61648,
...           56.60323, 56.63215, 56.74365, 56.98378, 57.34681,
...           57.78903, 58.27959,)
>>> list(grouper(4, corpus))
[(56.71739, 56.6795, 56.65762, 56.6332),
 (56.61648, 56.60323, 56.63215, 56.74365),
 (56.98378, 57.34681, 57.78903, 58.27959)]
>>> print '\n\n'.join('\n'.join(group)
...                   for group
...                   in grouper(4, map(str, corpus)))
56.71739
56.6795
56.65762
56.6332

56.61648
56.60323
56.63215
56.74365

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