[英]Printing alternate lines using python
我有一個像文本文件
1 2 3 4 5 6 7 8 9 10
... 等等。
如何編寫程序來打印前2行然后跳過3然后打印2行(這就是模式。)
我是一個完整的菜鳥。
任何幫助將不勝感激。
謝謝。
基於行枚舉並假設一個5項循環(顯示前兩項,跳過下面三項):
for i, line in enumerate(file('myfile.txt')):
if i % 5 in (0, 1):
print line
我不知道是否有這種模式,真的。 你可以只是file.readlines()
整個事情並使用數組切片。 如果你擔心內存消耗,使用迭代文件句柄itertools.compress()
對生成的圖案itertools.cycle()
。 或者,你知道,只需寫一個循環或列表理解。
我能想到的最好的是使用模運算符。 像這樣的東西:
f = open('filename.txt', 'r')
for index, line in enumerate(f.readlines()):
if index%5 <= 1:
print(line)
這應該產生你正在尋找的模式。
由於其他人在這里擊敗我的答案是一行版本:
print list(line for lineNum, line in enumerate(open("test.txt", "r")) if lineNum % 5 in (0, 1))
:-)
with open(filename) as f:
print ''.join( f.readline() for i in xrange(7) if i in (0,1,5,6))
要么
with open(filename) as f:
print ''.join( f.readline() for i in '1100011' if i=='1')
要么
with open(filename) as f:
print ''.join( i*f.readline() for i in (1,1,0,0,0,1,1))
基於@pynator的答案,並使用itertools
模塊 ,這里是與ifilter
- imap
組合相同的解決方案。
z
是一個可迭代的file("myfile.txt")
。 imap
用於從枚舉對中選擇原始數據項。
>>> from itertools import ifilter, imap
>>> result = imap(lambda x: x[1], ifilter(lambda x: x[0]%5 in (0,1), enumerate(z)))
>>> for i in result: print i
...
line 1
line 2
line 6
line 7
line 11
line 12
line 16
line 17
>>>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.