2013-12-17 18 views
0

我有一个包含以下lines.In这一点,如果我给输入的字符串为“LOG_MOD_L0_RECEIVE_TXBRP_CONTROL”,那么它应该从如何具体线路从文件复制在python

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, 

它不会复制直到括号结束。

回答

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循环将从同一个文件对象中读取更多行,直到找到包含)的行。

for循环然后在while循环完成后恢复时,循环会在文件对象现在进入的位置处启动。

+0

它的工作100%绝对..非常感谢你 – user3082400

+0

@ user3082400:然后,你找到一行''''之前用完了文件。 –

+0

@ user3082400:我为此添加了处理,但这确实意味着您可能正在处理截断的输入文件。 –