should_print, text = False, ''
with open(nmea) as nmeafile:
for num, line in enumerate(nmeafile, 1):
if should_print:
print '{0}, {1}'.format(text, line)
should_print = False
if "$INGGA" in line:
should_print, text = True, line
from itertools import tee, izip
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return izip(a, b)
def ingga(nmeafile):
for line, nextline in pairwise(nmeafile):
if "$INGGA" in line:
yield line
yield nextline
with open("nmea") as nmeafile:
for i in ingga(nmeafile):
print i,
或者,如果您不需要可重用函数
with open("nmea") as nmeafile:
for line, nextline in pairwise(nmeafile):
if "$INGGA" in line:
print line,
print nextline,
这里更简单的解决方案是放置一个条件,以便在迭代器中轮到下一行时打印它。因为如果你试着在它不在之前打印它(例如,如果$INGGA是最后一行)
这是我最喜欢的方法。将这些行读入一个列表中,然后遍历到倒数第二个元素,防止您试图打印不存在的行。在
您可以使用
itertools
配方pairwise
,它将在每次迭代中生成当前行和下一行。你检查第一个,然后两个都给。在为了一个文件
它会回来的
^{pr2}$所有的处理都在RAM中完成(文件被逐行读取和处理),并且没有过程变量(在一次迭代中设置标志,在下一次迭代中重置)。在
或者,如果您不需要可重用函数
相关问题 更多 >
编程相关推荐