我有一个包含以下行的文件。如果我将输入字符串作为“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,
它不会在关闭括号结束前复制。
答案 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
循环完成后恢复时,循环将获取文件对象现在进展到的位置。