2012-10-11 41 views
0

我的輸入文件是每行一句。比方說,它看起來像:Python while while continue loops

A 
B 
C 
D 
E 
F 

所需的輸出是:

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

我知道,我應該使用一個while循環,但不知道如何?

+2

那麼你到底有什麼問題?你有嘗試過什麼嗎? – sth

回答

4

這裏不需要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值,可以使用定點對象。

+1

不要忘記在@Sabba使用該版本時注意Python 2食譜。 http://docs.python.org/library/itertools.html#recipes – zigg

+0

@zigg我只是在那裏添加該筆記。 –

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 = [] 
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相同。