在Python中创建xml文件,列出给定目录中的所有文件

时间:2013-03-12 03:04:59

标签: python xml directory-listing

我有一个目录,我必须编写一个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 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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