使用Python 3 html.parser getpos()方法的正确方法是什么?
我使用以下示例来探索html.parser方法的子集:
https://docs.python.org/3/library/html.parser.html#examples
我的复制粘贴演示程序有效。但现在我想使用 html.parser 的getpos()方法来获取标记的行号和偏移量。
经过多次实验,包括尝试在示例中给出的类中添加单独的 def getpos()方法(输出什么都没有),这是我能够实现的唯一方法让getpos()返回它的行号和偏移元组是通过在以下代码片段的每一行插入一行(在我看来是什么)笨拙和丑陋的代码:
<link rel="stylesheet" href="<?=base_url('assets/dist/css/singup.css');?>">
<div class="container">
<div class="col-md-6">
<div id="logbox">
<form id="signup" method="post">
<h1>create an account</h1>
<input name="user[name]" type="text" placeholder="What's your username?" pattern="^[\w]{3,16}$" autofocus="autofocus" required="required" class="input pass" />
<select name="profile_id" id="profile_id">
<option value="">Select a Profile</option>
<?php foreach ($profile as $value): ?>
<option value="<?php echo $value['id'];?>"><?php echo $value['profile']; ?></option>
<?php endforeach ?>
</select>
<input name="user[password]" type="password" placeholder="Choose a password" required="required" class="input pass" />
<input name="user[password2]" type="password" placeholder="Confirm password" required="required" class="input pass" />
<input name="user[email]" type="email" placeholder="Email address" class="input pass" />
<input type="submit" value="Sign me up!" class="inputButton" />
<div class="text-center">
already have an account? <a href="#" id="login_id">login</a>
</div>
</form>
</div>
</div>
</div>
这样做 - 只举一个例子,它打印的HTML输入文件第5行的零缩进开始标记:
from html.parser import HTMLParser
...
class FlareTopicParser(HTMLParser):
def handle_starttag(self, tag, attrs):
# Following line inserted by me into class's examples.
print(" Line, offset ==", HTMLParser.getpos(self))
# This working code from examples per
# https://docs.python.org/3/library/html.parser.html#examples
print(" Start tag:", tag)
for attr in attrs:
print(" attr:", attr)
但是示例代码第4行中的 Line, offset == (5, 0)
构造(对于这只偶然的Python 3编码器)似乎是笨拙和错误的。
使用getpos()的方法是正确的,或者更好的方法是什么?
答案 0 :(得分:0)
无需在解析器中覆盖getpos
;我建议按如下方式重写第4行:
(line, column) = self.getpos()
print("line %d column %d") % (line, column)
通过此getpos()
来电,您也可以独立使用line
或column
。