LXML etree.iterparse()中存在编码错误,但etree.parse()中没有编码错误

2024-06-02 05:52:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用LXML解析一个大约200MB的XML文件。我愚蠢地做了etree.parse(xml_path),没有任何encoding参数作为参数,然后使用iterwalk()在一些子节点上迭代,认为这会降低内存消耗。它成功了,我可以解析整个XML文件,尽管速度非常慢。然后我意识到,在执行etree.parse(xml_path)时,整个文件都加载到内存中,因此在执行iterparse()iterwalk()之后再执行是没有意义的

现在,我试图直接在同一个文件上执行etree.iterparse(xml_path),但是我得到了

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 5123: invalid start byte

我尝试使用encoding='utf-8'encoding='ISO-8859-1'作为iterparse()中的参数,但错误仍然存在。我的XML文件声明编码为'ISO-8859-1'

TL;DR:etree.parse()工作正常,但etree.iterparse()由于编码错误而失败。我浏览了所有关于iterparse()编码的答案,但似乎还没有人遇到这个问题


Tags: 文件path内存编码参数parseisoxml