如何在python中复制文件中的特定行

时间:2013-12-17 15:17:02

标签: python

我有一个包含以下行的文件。如果我将输入字符串作为“LOG_MOD_L0_RECEIVE_TXBRP_CONTROL”,那么它应该从

复制该行
6.959999999:    LOG_MOD_L0_RECEIVE_TXBRP_CONTROL(0, 
 0x0059005f, 
 0x0049006d, 
 0x00b9008b, 
 0x001300b9)

这是我的档案:

6.959999999:    LOG_MOD_L0_RECEIVE_TXBRP_CONTROL(0, 
 0x0059005f, 
 0x0049006d, 
 0x00b9008b, 
 0x001300b9)
7.959999999:    LOG_MOD_L0_RECEIVE_TXBRP_Measure(1, 
 0x0059005m, 
 0x0049006d, 
 0x04b9008b, 
 0x001300b9)

我的代码:

fo=open("file1.txt","r")
fin=open("file2.txt","r")
string=raw_input("Enter the String:")
lines=fo.readlines()
   for line in lines:
       if string in line:
       fin.write(line)
fin.close()

它的复制只是这么多。

6.959999999:    LOG_MOD_L0_RECEIVE_TXBRP_CONTROL(0, 

它不会在关闭括号结束前复制。

1 个答案:

答案 0 :(得分:2)

你必须以块的形式阅读文件;您的匹配文本只出现在一行上,但要获得其余行,您必须继续阅读:

with open("file1.txt","r") as fin, open("file2.txt","w") as fout:
    string = raw_input("Enter the String:")
    for line in fin:
        if string in line:
            fout.write(line)
            try: 
                while ')' not in line:
                    line = next(fin)
                    fout.write(line)
            except StopIteration:
                pass  # ran out of file to read

这使用输入文件对象作为可迭代,使用for line in fin直接在打开的文件对象上循环。找到匹配的行后,嵌套的while循环会从同一个文件对象中读取 more 行,直到找到)的行。

for循环在while循环完成后恢复时,循环将获取文件对象现在进展到的位置。