python-3.x 正确使用HTMLParser.getpos()的方法?

b1zrtrql  于 2023-02-01  发布在  Python
关注(0)|答案(2)|浏览(96)

使用Python 3的html.parser的getpos()方法的正确方法是什么?
我使用下面的示例来研究html.parser方法的子集:
https://docs.python.org/3/library/html.parser.html#examples
我的复制粘贴演示程序可以工作,但是现在我想使用 html.parser 的getpos()方法来获取标记的行号和偏移量。
经过无数次的实验,包括尝试给示例中给出的类添加一个单独的 def getpos() 方法(没有任何输出),我能够让getpos()返回其行号和偏移元组的唯一方法是在下面代码片段的第4行插入一行(在我看来)笨拙而丑陋的代码:

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)

这是可行的--仅给予一个例子,对于它打印的HTML输入文件第5行上缩进为零的开始标记:

Line, offset == (5, 0)

但是示例代码第4行中的HTMLParser.getpos(self)构造似乎(对于这位偶尔的Python 3编码者来说)笨拙且错误。
使用getpos()的正确方法是什么,或者如果您愿意,使用getpos()的更好方法是什么?

laik7k3q

laik7k3q1#

不需要在解析器中重写getpos;我建议将第4行改写如下:

(line, column) = self.getpos()
print("line %d column %d") % (line, column)

通过这种对getpos()的调用,您还可以单独使用linecolumn

relj7zay

relj7zay2#

下面是使用getpos()的方法:

row, col = parser.getpos()
html.splitlines()[row-1][col:col+100]

相关问题