Python:在满足特定条件的特定行之后将整个文件写入另一个文件

时间:2013-07-31 19:32:46

标签: python html file text insert

我正在研究一个Python脚本,当我运行它时,它会拼凑不同文件中的文本,以便我可以创建一个网站的替代版本,以便轻松比较不同的设计,并确保它们都具有相同的固有数据,即。菜单项在所有版本中都是一致的。

一个特定的问题区域是确保菜单(不同餐点的聚宝盆)始终相同。因此我做了这个功能:

def insert_menu():
    with open("index.html", "r+") as index:
        with open("menu.html", "r+") as menu:
            for i in index:
                if "<!-- Insert Menu here -->" in i:
                    for j in menu:
                        index.write(j)

但是,它的行为方式并不像我想要的那样,因为我无法在Stack Overflow上找到从其他答案中提取所需内容的方法。

在它的当前状态下,它会在menu.html的末尾附加index.html中存储的文字。

我希望它在行menu.html下面的index.html中写入文本,该行位于<!-- Insert Menu here -->(但不一定总是在同一行号,因此排除了在特定行写入的选项),包含menu.html。然后,在index.html内的所有内容都写入index.html后,我希望menu.html“继续”可以这么说。

基本上我的意思是在包含index.html的行之后将文本从<!-- Insert Menu here -->楔入index.html但是该注释下面还有更多文字我必须保留(脚本等)

<!-- Insert Menu here -->文档复制,这是围绕<html> <body> <div id="wrapper"> <div id="container"> <div class="map"> </div> <!-- Insert Menu here --> </div><!-- Container ends here --> </div><!-- Wrapper ends here --> </body> </html>

的内容
index.html

请注意,在{{1}}中,上面的块都缩进了一个更大的div,我不能轻易地在SO上复制它。

如何更改我的代码以达到预期的效果,或者我是否以非常迂回的方式进行此操作?

而且,我如何澄清这个问题以帮助你帮助我?

4 个答案:

答案 0 :(得分:0)

你可以尝试一下,告诉我它是否有效吗?由于我没有您的文件,因此假设您已阅读该文件并将其存储在字符串中。

string = "blablabla \n  blebleble \n <!-- Insert Menu here --> \n bliblibli"
pattern = ".*<!-- Insert Menu here -->(.*)"
print re.match(pattern, string, re.S).groups()

这将匹配插入菜单后面的内容 - >,包括任何空格和行跳转。如果你想跳到下一行:

pattern = ".*<!-- Insert Menu here --> .*\n (.*)"

更新:刚刚意识到这意味着要读取整个文件,这是可以接受的吗? 干杯!

答案 1 :(得分:0)

假设文件不是很大,可以使用简单的字符串替换:

def insert_menu():
    with open("index.html") as index:
        index_text = index.read()
    with open("menu.html") as menu:
        menu_text = menu.read()
    # I called it index2 so it doesn't overwrite... you can change that
    with open("index2.html", "w") as index2:
        index2.write(index_text.replace('<!-- Insert Menu here -->', menu_text))

答案 2 :(得分:0)

由于另一个似乎没有工作,这个选项怎么样(不太优雅,诚然):

condition = False
new_string = ""
with open("index.html") as f:
    for lines in f:
        if condition == True:
            new_string = new_string + lines + "\n"
        if "<!-- Insert Menu here -->" in lines:
            condition = True

然后您可以将new_string打印到新文件中。

这有用吗?

答案 3 :(得分:0)

尝试更新源文件到位将无法正常工作。在阅读时写入“索引”将不会按照您的想法进行操作 - 它将覆盖您的引人注目的字符串后面的行。

相反,您应该将'index'和'menu'源文件都视为输入,并创建第三个文件作为输出(您基本上将两个输入文件合并为一个组合输出文件)。使用'经典'语法:

output = open('merged.html', 'w')
for line in open('index.html'):
    if '<!-- Insert Menu here -->' in line:
        for menuline in open('menu.html'):
            output.write(menuline)
    else:
        output.write(line)

如果您愿意,可以将其更改为“使用”语法。