从文件中写入行

时间:2013-03-04 12:37:56

标签: python

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

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

我一直试图弄清楚如何定义两个函数,比如在匹配行之后获取前一行和下一行。所以任何想法,任何帮助都是非常合适的。

2 个答案:

答案 0 :(得分: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 = []

答案 1 :(得分:0)

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

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

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

当你最终到达另一个空间时,如果变量为true,则使用该缓冲区执行任何操作,即写入另一个文件。

重置缓冲区,重新开始。

直到文件末尾。