在Python中创建列出指定目录所有文件的XML文件
我有一个文件夹,接下来我需要写一个Python脚本,来创建一个XML文件,这个文件里要包含这个文件夹里所有的.xml文件。
比如说,/tmp/文件夹里有以下这些xml文件:
beans.xml
cakes.xml
donuts.xml
我正在想办法写一个脚本,来生成下面这样的xml:
<root>
<include file="/tmp/beans.xml"/>
<include file="/tmp/cakes.xml"/>
<include file="/tmp/donuts.xml/>
</root>
到目前为止,我拼凑出来的代码是这样的,但是每次运行时都会覆盖文件标签,所以最后只包含了donuts.xml。
import lxml.etree
import lxml.builder
import glob
import os
E = lxml.builder.ElementMaker()
ROOT = E.root
DOC = E.include
os.chdir("/tmp/")
for f in glob.glob("*.xml"):
the_doc = ROOT(
DOC(file=f)
)
print lxml.etree.tostring(the_doc, pretty_print=True)
这是我现在脚本的输出结果:
<root>
<include file="/tmp/donuts.xml"/>
</root>
我该怎么做才能让beans.xml和cakes.xml不被覆盖呢?
2 个回答
1
我对lxml了解不多,但看了下文档,得出了这个解决方案:
import os
import glob
from lxml import etree
if __name__ == '__main__':
root = etree.Element('root')
os.chdir('/tmp')
for filename in glob.glob('*.xml'):
root.append(etree.Element('include', file=filename))
print etree.tostring(root, pretty_print=True) # Or, print to a file if you wish
2
你在每次循环的时候都在覆盖 the_doc
。所以你的输出只有一个元素。试试这个:
os.chdir("/tmp/")
files = [DOC(file=f) for f in glob.glob("*.xml")]
the_doc = ROOT(*files)
print lxml.etree.tostring(the_doc, pretty_print=True)