python从文本fi获取行+1

2024-04-27 21:07:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件,我在找一个叫“$INGGA”的特别的刺。我的代码将打印所有带有此字符串的行,但我还需要下一行的字符串。我该怎么做?我目前的代码是:

with open(nmea) as nmeafile:
    for num, line in enumerate(nmeafile, 1):
        if "$INGGA" in line:
            print line
            # add code to print the line+1

非常感谢

菲尔


Tags: 文件字符串代码inforaswithline
3条回答

这里更简单的解决方案是放置一个条件,以便在迭代器中轮到下一行时打印它。因为如果你试着在它不在之前打印它(例如,如果$INGGA是最后一行)

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

这是我最喜欢的方法。将这些行读入一个列表中,然后遍历到倒数第二个元素,防止您试图打印不存在的行。在

with open("info.txt") as f:
    lines = f.readlines()
    for i in xrange(len(lines)-1):
        if "$INGGA" in line:
            print lines[i]
            print lines[i+1]

您可以使用itertools配方pairwise,它将在每次迭代中生成当前行和下一行。你检查第一个,然后两个都给。在

为了一个文件

asd
hello
$INGGA
argh
fpp
$INGGA
cake
sausage

它会回来的

^{pr2}$

所有的处理都在RAM中完成(文件被逐行读取和处理),并且没有过程变量(在一次迭代中设置标志,在下一次迭代中重置)。在

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,

相关问题 更多 >