我只是想编写一个小网页,它可以使用正则表达式解析一些文本并在表中返回结果匹配。这是我第一次使用Python进行Web开发,我不得不说,它看起来很乱。
我的问题是为什么我只获得数据集中最后一场比赛的输出?我认为这一定是因为嵌套循环的格式不正确。
这是我提供的数据:
groups 只是一个与正则表达式组相对应的 ID,它的名称用于提供表的标题。
模式类似于:
(\d+)\s(\S+)\s(\S+)$
和数据:
12345 SOME USER
09876 SOMEONE ELSE
54678 ANOTHER USER
我的简单页面:
<%
import re
pattern = form['pattern']
p = re.compile(pattern)
data = form['data']
matches = p.finditer(data)
lines = form['groups'].split("\n")
groupids ={}
for line in lines:
key, val = line.split(' ')
groupids[int(key.strip())] = val.strip()
%>
<html>
<table style="border-width:1px;border-style:solid;width:60%;">
<tr>
<%
for k,v in groupids.iteritems():%>
<th style="width:30px;text-align:center"><%= v %></th>
<%
# end
%>
</tr>
<%
for match in matches:
#begin
%><tr>
<%
for i in range(1, len(match.groups())+1):
#begin
%>
<td style="border-style:solid;border-width:1px;border-spacing:0px;text-align:center;"><%= match.group(i) %></td>
<%
#end
# end
%>
</tr>
</table>
</html>
编辑
下面是我运行的测试
代码:
import re
pattern = "(\d\d\d\d\d)\s(\S+)\s(\S+)"
p = re.compile(pattern)
data = """12345 TESTS USERS
34567 TESTS USERS
56789 TESTS USERS"""
groups = """1 PIN
2 FNAME
3 LNAME"""
matches = p.finditer(data)
lines = groups.split("\n")
print lines
groupids ={}
for line in lines:
key, val = line.split(' ')
groupids[int(key.strip())] = val.strip()
for k,v in groupids.iteritems():
print "%s\t" % v,
print ''
for match in matches:
for i in range(1, len(match.groups())+1):
print "%s\t" % match.group(i),
print ''
输出:
PIN FNAME LNAME
12345 TESTS USERS
34567 TESTS USERS
56789 TESTS USERS
最佳答案
<%
for match in matches:
#begin
%><tr>
<%
for i in range(1, len(match.groups())+1):
#begin
%>
<td style="border-style:solid;border-width:1px;border-spacing:0px;text-align:center;"><%= match.group(i) %></td>
<%
#end
# end
%>
是的,你那里没有嵌套循环。相反,您有一个在 matches
上输出“
range(...)
上的第二个循环,该循环仅在第一个循环之后运行已完成。第二个不在第一个内,因为它没有缩进这样说。
来自doc ,我认为你需要说的是:
<%
for match in matches:
# begin
%><tr><%
for group in match.groups():
# begin
%><td style="border-style:solid;border-width:1px;border-spacing:0px;text-align:center;"><%= group %></td><%
# end
%></tr><%
# end
%>
但我只能同意你的“困惑”评论:如果 PSP 要求你像这样折磨你的 HTML 缩进以适应你的 Python 结构,那真的是做错了,你应该寻找另一个,不太糟糕的模板语法。 Python 有很多很多模板语言,它们对于控制结构具有更合理的语法。作为一个例子,在我使用上面的例子中,它看起来像:
<px:for item="match" in="matches"><tr>
<px:for item="group" in="match.groups()">
<td style="border-style:solid;border-width:1px;border-spacing:0px;text-align:center;">
<?_ group ?>
</td>
</px:for>
</tr></px:for>
关于python - python 服务器页面中的嵌套循环语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/632624/
相关文章:
python - 如何在 python 中使用 pandas 仅从具有两个数据框的网页中选择第二个数据框?
python - 如何使用 SQLAlchemy 和 contains_eager 中关系上定义的 order_by?
python - 如何从 Modbus Slave 读取所有保持寄存器?
python - MS Azure - python http.server - 连接被拒绝
python - mod_wsgi 下的 psp(python 服务器页面)代码?
python - 如何在 python 中解释这个循环结果?