1

在此示例中,我在文件中找到一个字符串并将匹配的行写入另一个文件。这是基本的,也是我目前能做的。

fd_w = open('tt', 'w')
with open('r.0', 'r') as IRR:
    for line in IRR:
        if 'status: ASSIGNED PA' in line:
            towrite = "%s" % (line)
fd_w.write(towrite)   
fd_w.close()

我真正想做的是,当有匹配行时,获取匹配行之前的行,直到有空格,然后类似地获取匹配行之后的行,直到有空格。

这是正在读取的文件中的示例。

admin-c:        DUMY-RIPE
tech-c:         DUMY-RIPE
status:         ASSIGNED PA
mnt-by:         AS6667-MNT

admin-c:        DUMY-RIPE
tech-c:         DUMY-RIPE
status:         ASSIGNED PA
mnt-by:         DATANET-NOC

我一直在试图弄清楚如何定义两个函数,比如在匹配行之后获取上一行和下一行。所以任何想法,任何帮助都是高度恰当的。

4

2 回答 2

2

读取由空行划定的块中的数据,然后测试您的状态:

with open('r.0', 'r') as IRR, open('tt', 'w') as fd_w:
    lines = []
    for line in IRR:
        line = line.strip()
        if line:
            lines.append(line)
        else:
            # empty line, found a complete block, test for status line
            if 'status:         ASSIGNED PA' in lines:
                for line in lines:
                    fd_w.write(line + '\n')
            lines = []
于 2013-03-04T12:49:48.190 回答
0

我会创建一个缓冲区并保留一个变量来判断该缓冲区中是否存在匹配项。

例如,当您开始读取文件时,使用列表启动缓冲区。

将所有内容附加到该列表,直到您获得另一个空格,如果同时找到匹配项,请使用变量来跟踪该事实。

当您最终到达另一个空间时,如果变量为真,则使用该缓冲区做任何您想做的事情,即写入另一个文件。

重置缓冲区,重新开始。

这样做直到文件结束。

于 2013-03-04T12:46:25.713 回答