私の入力ファイルは1行に1文です。次のようになっているとしましょう。
A
B
C
D
E
F
必要な出力は次のとおりです。
::NewPage::
A
B
::NewPage::
C
D
::NewPage::
E
F
whileループを使用する必要があることはわかっていますが、その方法がわかりません。
私の入力ファイルは1行に1文です。次のようになっているとしましょう。
A
B
C
D
E
F
必要な出力は次のとおりです。
::NewPage::
A
B
::NewPage::
C
D
::NewPage::
E
F
whileループを使用する必要があることはわかっていますが、その方法がわかりません。
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
は、センチネルオブジェクトを使用できます。
これが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のものと同じです。
このような?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 = []