我试图从以下位置复制pdftables代码:
https://github.com/jeremyjbowers/pdftable/blob/master/pdftable.py
在Python3中,但是我面临一些兼容性问题,特别是与HTMLparser和相关函数的兼容性。
在下面的代码中:我如何复制save_bgn和save_end的功能,或者在Python3.4中有什么替代品
def __init__(self, extractor, rows, columns):
self.extractor = extractor
self.set = extractor.set
self.rows = rows
self.columns = columns
self.html_parser = html.parser.HTMLParser(None)
def filter(self, str):
str = re.sub(r'<[^>]+>', '', str)
self.set.html_parser.save_bgn()
self.set.html_parser.feed(str)
return self.set.html_parser.save_end()
任何帮助都将不胜感激。 谢谢。在
据我所知,pdftable.py使用html作为中介,将pdf表格转换为.csv文件。在
由于pdftable使用htmllib,而HTMLParser模块在2.6中被弃用,因此您的问题不在于从2.x的转换htmlpar.htmlpar到3.xhtml.parser.HTMLParser,但从2.xhtmllib.HTMLParser到2.xHTMLParser.HTMLParser. 尽管类名仍然是HTMLParser,但是除了.feed(text)方法之外,其他所有的API都是完全不同的。为了重写htmllib代码,必须理解它在做什么,因为机械替换是不可能的。在
对于htmllib,签名是HTMLParser(formatter),其中formatter应该是formatter模块中的一个类或其子类。(格式化程序模块在3.4中被弃用,因为删除htmllib left几乎没有用)其目的是用添加的标记方法实例化HTMLParser的一个子类。但是,pdftable使用空解析器。在
在
^{pr2}$filter
的第一行中正则表达式显示为匹配标记,替换将删除它们。接下来的三行
save_bgn()
说开始“在缓冲区中保存字符数据,而不是将其发送到格式化程序对象。”(这是件好事,因为没有格式化程序。)如果没有标记和标记方法,我不知道通过解析器给字符串输入什么。如果答案是“没有”,我也不会感到惊讶。如果是这样,您的答案将是删除这三行,并且可能是def filter
,将filter()调用替换为re.sub公司打电话。在为了找到答案,我建议添加一些2.x打印语句到过滤器,然后在2.7上运行示例pdf文件。在
相关问题 更多 >
编程相关推荐