xml.etree.ElementTree
Python 2 及其函数的一些解释parse()
。该函数将源作为第一个参数。或者它可以是一个打开的文件对象,也可以是一个文件名。该函数创建ElementTree
实例,然后将参数传递给tree.parse(...)
如下所示:
def parse(self, source, parser=None):
if not hasattr(source, "read"):
source = open(source, "rb")
if not parser:
parser = XMLParser(target=TreeBuilder())
while 1:
data = source.read(65536)
if not data:
break
parser.feed(data)
self._root = parser.close()
return self._root
您可以从第三行猜测,如果传递了文件名,则文件将以二进制模式打开。这样,如果文件内容采用 UTF-8 格式,则您正在处理具有 UTF-8 编码的二进制内容的元素。如果是这种情况,您还应该以二进制模式打开输出文件。
另一种可能性是codecs.open(filename, encoding='utf-8')
用于打开输入文件,并将打开的文件对象传递给xml.etree.ElementTree.parse(...)
. 这样,ElementTree
实例将使用 Unicode 字符串,并且您应该在写回内容时将结果编码为 UTF-8。如果是这种情况,您也可以使用codecs.open(...)
UTF-8 来编写. 您可以将打开的输出文件对象传递给提到的tree.write(f)
,或者让tree.write(filename, encoding='utf-8')
文件为您打开。