在Python中创建列出指定目录所有文件的XML文件

0 投票
2 回答
1470 浏览
提问于 2025-04-17 18:45

我有一个文件夹,接下来我需要写一个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)

撰写回答