【问题标题】:Creating xml file in Python that lists all files in a given directory在 Python 中创建列出给定目录中所有文件的 xml 文件
【发布时间】:2013-03-12 03:04:59
【问题描述】:

我得到了一个目录,我必须编写一个 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 表单被覆盖?

【问题讨论】:

  • 如何防止 beans.xml 和 cakes.xml 被覆盖,抱歉
  • 不要将更正作为评论发布,编辑原始帖子!
  • 明白了,抱歉我是新手
  • 没问题,学习曲线的一部分:-)

标签: python xml directory-listing


【解决方案1】:

您将在每次迭代中覆盖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)

【讨论】:

  • 成功了,非常感谢!所以你在目录中创建了一个 xml 文件的列表,然后 the_doc = ROOT(*files) 指向列表中的每个项目?
  • @user1420913 没错,ROOT(*files) unpacks the list 的文件。 ROOT(*[f1,f2,f3])ROOT(f1, f2, f3) 是一样的。
【解决方案2】:

我对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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 2017-04-03
    • 2020-04-09
    • 2017-02-16
    • 2011-06-13
    • 2019-11-16
    相关资源
    最近更新 更多