如何在python中使用web表单更改多行?

如何在python中使用web表单更改多行?,python,flask,Python,Flask,我有一个文本文件,其中包含如下内容: host host_name { # comment (optional) hardware ethernet 01:22:85:EA:A8:5D; fixed-address 192.168.107.210; } host another_host_name { # comment (optional) hardware ethernet 01:22:85:EA:A8:5D; fixed-address 192.168.1

我有一个文本文件,其中包含如下内容:

host host_name {
# comment (optional)
    hardware ethernet 01:22:85:EA:A8:5D;
    fixed-address 192.168.107.210;
}

host another_host_name {
# comment (optional)
    hardware ethernet 01:22:85:EA:A8:5D;
    fixed-address 192.168.107.210;

}
我希望我的程序检测带有“主机”的行,然后根据我键入的内容修改块的内容

当我在烧瓶中执行以下操作时(例如使用
request.form.get('name')
):

我希望:

host host_name {
# comment (optional)
    hardware ethernet 01:22:85:EA:A8:5D;
    fixed-address 192.168.107.210;
}

#after the change
host name2 {
# nothing
    hardware ethernet 00:00:00:00:00:00;
    fixed-address 192.168.101.123;

}

我对正则表达式没有问题,而是为了实现这一点我必须要做的程序,那么我该怎么做呢?

如果你开始改变你对问题的思考方式,你可能会有一个没有人可以改变或维护的完全的、彻底的混乱,即使它一开始起作用

你有几个不同的小任务,你认为它们是“一件事”

不是。您使用Falsk是为了提供一个简单、轻量级的web界面。没关系。您已经知道如何从中获取文本块。你现在不需要问任何关于烧瓶的事。tio也不会将任何其他代码放在从web获取数据的代码所在的位置

相反,只需编写一些简单的Python函数,将文本数据作为参数,然后为您更新配置文件

同时,如果您可以选择一个特殊的模板,并在执行此操作时创建一个新的配置文件,而不是尝试解析现有文件,并在适当的位置更新所需的值,那么,这是您可以实现的

解析一个“真实世界”的配置文件并进行实时更新并非易事。实际上,它可能非常复杂,以至于大多数Linux发行版在10年多的时间里都没有尝试过

然后还有一个没有提到的更复杂的问题:您可能希望在文件中保留任何未更改的配置。我建议您保留一个文件模板,并填写数据,在每次运行时创建一个新文件。但这将要求您以其他格式保存所有其他配置数据,这基本上会重复您的问题

所以,好吧,你用正则表达式“从原始文件中获取数据”的想法可能是可行的。但仍然要将其与写回文件分开。如果所说的文件是以块的形式构造的,不要用“行”来思考

一个可行的方法是读取文件,将您感兴趣的数据放入Python数据结构(例如,一个字典列表,每个字典都有您的主机名、注释、以太网和ip字段)。并且,在同一个正则表达式的第二次应用中,更改占位符的所有内容,以便通过调用
.format
方法或使用Flask的jinja2模板来填充文件内容

将上述两个功能分开,甚至可以让您在web界面上显示所有配置的主机,这样用户就可以单独编辑,而无需手动键入以太网地址


对不起,我不会为你写这些代码的。我希望以上内容能帮助你考虑一个合适的方法。因此,如果稍后您提出其他问题,以及您尝试的一些代码,我们可以进一步帮助您。

我是初学者,所以我想到了一种使用我已经知道的方法。基本上,我读取文件,将其转换为字典列表,并将其显示在表中。我想做的是,当用户单击一个表行时,他将被重定向到另一个页面,该页面具有web表单,该表单将预先填充他单击的数据,但所有这些操作和询问都很复杂。我将尝试找到一种方法来做这件事,也许会提出另一个话题来询问与我的课程有关的一个细节。谢谢你的时间和解释。
host host_name {
# comment (optional)
    hardware ethernet 01:22:85:EA:A8:5D;
    fixed-address 192.168.107.210;
}

#after the change
host name2 {
# nothing
    hardware ethernet 00:00:00:00:00:00;
    fixed-address 192.168.101.123;

}