2013-02-28 89 views
2

我想要做的是(使用下面的文本作为示例),在文本文件中搜索字符串“Text2”,然后插入一行(“插入文本”)两行在“文本2”之后。 “文本2”可以在文本文件的任何行上,但我知道它会在文本文件中出现一次。搜索文本文件并插入行

因此,这里的原始文件:

Text1 
Text2 
Text3 
Text4 

这里就是我想要的:

Text1 
Text2 
Text3 
Inserted Text 
Text 4 

所以我已经知道如何使用下面的代码中添加上面一行文字。

for line in fileinput.input('file.txt', inplace=1,backup='.bak'): 
    if line.startswith('Text 4'): 
     print "Inserted Text" 
     print line, 
    else: 
     print line, 

但我只是不知道如何在文件中搜索文本后添加两行。

+2

打印线和else子句是多余的,只打印行,如果你退出后 – Boaz 2013-02-28 23:45:36

回答

2

如果加载文件内容到一个列表,它会更容易操作:

searchline = 'Text4' 
lines = f.readlines() # f being the file handle 
i = lines.index(searchline) # Make sure searchline is actually in the file 

现在i包含线Text4的索引。您可以使用和list.insert(i,x)插入前:

lines.insert(i, 'Random text to insert') 

以后:

lines.insert(i+1, 'Different random text') 

,三线后:

lines.insert(i+3, 'Last example text') 

只要确保包括错误处理IndexError S和无论你想要什么,你都可以做到。

+0

这适用于完全匹配。对于以字符串开头或包含字符串的行有什么相似之处? – Mawg 2015-02-16 10:52:48

+0

尽管我的Python现在有点生疏,但我还是没有意识到这是一种非常简洁的方法。但据我所知,你必须迭代这些行才能找到正确的索引,类似于@ Boaan的解决方案。 – 2015-02-16 16:08:06

2

你可以使用

f = open("file.txt","rw") 
lines = f.readlines() 
for i in range(len(lines)): 
    if lines[i].startswith("Text2"): 
      lines.insert(i+3,"Inserted text") #Before the line three lines after this, i.e. 2 lines later. 

print "\n".join(lines) 
+0

如何将此字符串写入此文件? – n00dle 2015-12-30 11:16:34

2

快速正肮脏的方式是类似的东西

before=-1 
for line in fileinput.input('file.txt', inplace=1,backup='.bak'): 
    if line.startswith('Text 2'): 
     before = 2 
    if before == 0 
     print "Inserted Text" 
    if before > -1 
     before = before - 1 
    print line, 
+0

+1用于不将整个文件加载到内存中 – 2013-03-02 22:24:26

+0

并且用于处理该行以类别开始。使用'if'Text 2'行:'查找包含字符串的行 – Mawg 2015-02-16 10:55:25