我正在研究一个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上复制它。
如何更改我的代码以达到预期的效果,或者我是否以非常迂回的方式进行此操作?
而且,我如何澄清这个问题以帮助你帮助我?
答案 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)
如果您愿意,可以将其更改为“使用”语法。