0

私の入力ファイルは1行に1文です。次のようになっているとしましょう。

A
B
C
D
E
F

必要な出力は次のとおりです。

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

whileループを使用する必要があることはわかっていますが、その方法がわかりません。

4

3 に答える 3

4

whileここではループは必要ありません-grouperレシピを見てくださいitertools

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 に答える