0

我的输入文件是每行一个句子。假设它看起来像:

A
B
C
D
E
F

期望的输出是:

::NewPage::
A
B
::NewPage::
C
D
::NewPage::
E
F

我知道我应该使用 while 循环,但不知道如何使用?

4

3 回答 3

4

这里不需要循环-while查看.grouperitertools

def grouper(n, iterable, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

请注意,如果您使用的是 2.x ,则需要稍微不同的版本。

例如:

items = ["A", "B", "C", "D", "E"]
for page in grouper(2, items):
    print("::NewPage::")
    for item in page:
        if item is not None:
            print(item)

产生:

::NewPage::
A
B
::NewPage::
C
D
::NewPage::
E

如果您需要None值,可以使用哨兵对象。

于 2012-10-11T12:29:36.943 回答
2

我不知道这是否会打扰 PEP-8 的众神。

但是与语言无关的替代方案(更一般的受众可以理解)可能是:

items = ["A", "B", "C", "D", "E"]
out = []

for i,item in enumerate(items):
    if i%2 == 0:
        out.append("::New Page::")
    out.append(item)

编辑:当您在完成写作之前不检查是否有新答案时,就会发生这种情况。我的回答与 cdarke 的基本相同。

于 2012-10-11T12:44:00.260 回答
1

像这样?在 Python 3.3 上测试:

i = 0
page_size = 2
lines = []

for line in open("try.txt"):
    lines.append(line)
    i += 1
    if i % page_size == 0:
        print("::NewPage::")
        print("".join(lines),end="")
        i = 0
        lines = []
于 2012-10-11T12:35:57.667 回答