我的輸入文件是每行一句。比方說,它看起來像:Python while while continue loops
A
B
C
D
E
F
所需的輸出是:
::NewPage::
A
B
::NewPage::
C
D
::NewPage::
E
F
我知道,我應該使用一個while循環,但不知道如何?
我的輸入文件是每行一句。比方說,它看起來像:Python while while continue loops
A
B
C
D
E
F
所需的輸出是:
::NewPage::
A
B
::NewPage::
C
D
::NewPage::
E
F
我知道,我應該使用一個while循環,但不知道如何?
這裏不需要while
循環 - 請參閱itertools
中的the grouper
recipe。
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,則需要a slightly different version。
E.g:
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
值,可以使用定點對象。
不要忘記在@Sabba使用該版本時注意Python 2食譜。 http://docs.python.org/library/itertools.html#recipes – zigg
@zigg我只是在那裏添加該筆記。 –
是否這樣?在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 = []
我不知道這是否會打擾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相同。
那麼你到底有什麼問題?你有嘗試過什麼嗎? – sth