簡體   English   中英

使用python打印備用線

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM