0

我正在编写一个 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.htmlindex.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上面的块中都缩进了一个更大的 div,我不能轻易地在 SO 上复制它。

我怎样才能改变我的代码来达到预期的结果,还是我要以一种非常迂回的方式来解决这个问题?

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

4

4 回答 4

1

尝试就地更新源文件是行不通的。在阅读时写入“索引”不会像你想的那样 - 它会覆盖你引人注目的字符串后面的行。

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

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)

如果您愿意,将其更改为“使用”语法很简单。

于 2013-08-02T00:27:52.987 回答
0

Since the other one does not seem to be working, what about this option (less elegant, admittedly):

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

Then you can print new_string into the new file.

Does this work?

于 2013-07-31T22:05:12.593 回答
0

Assuming that the files aren't huge, a simple string replacement will work:

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))
于 2013-07-31T22:02:04.390 回答
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 (.*)"

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

于 2013-07-31T19:57:26.130 回答