使用 glob 和 lxml 解析 xml 的文件夹

Parsing a folder of xml using glob and lxml

我在尝试使用 python 3 和 lxml.

解析包含有效 xml 文件 (*.ditamap) 的文件夹时遇到了一些困难

返回的错误是

"lxml.etree.XMLSyntaxError: Document is empty, line 1, column 1"

我的代码

import glob
import lxml.etree as et

for file in glob.glob('*.ditamap'):
    with open(file) as xml_file:
        #tree = et.parse("0579182.ditamap")
        tree = et.parse(xml_file)
        print (et.tostring(tree, pretty_print=True))

et.parse 在我直接传递文件名时起作用,但在传递文件变量时不起作用。

我做错了什么?似乎有某种 IO 错误或 tpye 不匹配,但我看不出我做错了什么...

et.parse 需要一个文件名,但您给它的是一个打开的文件。尝试传递您的 file 变量。

import glob
import lxml.etree as et

for f in glob.glob('*.ditamap'):
    tree = et.parse(f)
    print (et.tostring(tree, pretty_print=True))

您可能要考虑使用 glob.iglob,因为您只是将它用作迭代器。

编辑:重读 et.parse 可以接受文件对象。不过还是试试吧。