使用Python将文本插入特定文本后的文本文件中

时间:2013-03-29 19:07:38

标签: python text

我必须编辑一些文本文件以包含新信息,但我需要根据周围文本在文件中的特定位置插入该信息。

这不符合我的需要:

 with open(full_filename, "r+") as f:
        lines = f.readlines() 
        for line in lines:
            if 'identifying text' in line:   
                offset = f.tell()
                f.seek(offset)  
                f.write('Inserted text')

...因为它将文本添加到文件的末尾。如何将其写入识别文本后的下一行?

(AFAICT,这不是类似问题的重复,因为没有一个能够提供这个答案)

3 个答案:

答案 0 :(得分:7)

如果您不需要在适当的地方工作,那么可能是:

with open("old.txt") as f_old, open("new.txt", "w") as f_new:
    for line in f_old:
        f_new.write(line)
        if 'identifier' in line:
            f_new.write("extra stuff\n")

(或者,与Python-2.5兼容):

f_old = open("old.txt")
f_new = open("new.txt", "w")

for line in f_old:
    f_new.write(line)
    if 'identifier' in line:
        f_new.write("extra stuff\n")

f_old.close()
f_new.close()

>>> !cat old.txt
a
b
c
d identifier
e

>>> !cat new.txt
a
b
c
d identifier
extra stuff
e

(关于在'string2'中使用'string1'的常见警告:'enamel'中的'name'为True,'Othello'中的'hello'为True等等,但显然你可以使条件任意复杂。)

答案 1 :(得分:1)

您可以使用正则表达式,然后替换文本。

import re
c = "This is a file's contents, apparently you want to insert text"
re.sub('text', 'text here', c)
print c

返回“这是文件的内容,显然你想在这里插入文字”

不确定它是否适用于您的用例,但如果适合它则很简单。

答案 2 :(得分:1)

这将查找文件中的任何字符串(不具体,仅在行的开头,即可以存在于多行中)。

通常你可以按照算法:

  1. 查找文件中的字符串,并捕获" location"
  2. 然后将文件拆分为此" location",并尝试创建新文件
    • 将start-to-loc内容写入新文件
    • 接下来,写下你的新文本"到新文件
    • 接下来,将记录到目标的内容发送到新文件
  3. 让我们看看代码:

    #!/usr/bin/python
    
    import os
    
    SEARCH_WORD = 'search_text_here'
    file_name = 'sample.txt'
    add_text = 'my_new_text_here'
    
    final_loc=-1
    with open(file_name, 'rb') as file:
            fsize =  os.path.getsize(file_name)
            bsize = fsize
            word_len = len(SEARCH_WORD)
            while True:
                    found = 0
                    pr = file.read(bsize)
                    pf = pr.find(SEARCH_WORD)
                    if pf > -1:
                            found = 1
                            pos_dec = file.tell() - (bsize - pf)
                            file.seek(pos_dec + word_len)
                            bsize = fsize - file.tell()
                    if file.tell() < fsize:
                                    seek = file.tell() - word_len + 1
                                    file.seek(seek)
                                    if 1==found:
                                            final_loc = seek
                                            print "loc: "+str(final_loc)
                    else:
                                    break
    
    # create file with doxygen comments
    f_old = open(file_name,'r+')
    f_new = open("new.txt", "w")
    f_old.seek(0)
    fStr = str(f_old.read())
    f_new.write(fStr[:final_loc-1]);
    f_new.write(add_text);
    f_new.write(fStr[final_loc-1:])
    f_new.close()
    f_old.close()