首页 > 解决方案 > 使用python脚本合并多个xml时找不到文件或目录

问题描述

我正在尝试通过在 shell 脚本中调用以下 python 脚本来合并文件

合并.py

#!/usr/bin/env python
#Merge xml files
import sys
from xml.etree import ElementTree

def run(files):
    first = None
    for filename in files:
        data = ElementTree.parse(filename).getroot()
        if first is None:
            first = data
        else:
            first.extend(data)
    if first is not None:
        print ElementTree.tostring(first)

if __name__ == "__main__":
    run(sys.argv[1:])

但是在运行时,我收到以下错误

Traceback (most recent call last):
  File "merge.py", line 18, in <module>
    run(sys.argv[1:])
  File "merge.py", line 9, in run
    data = ElementTree.parse(filename).getroot()
  File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 1182, in parse
    tree.parse(source, parser)
  File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 647, in parse
    source = open(source, "rb")
IOError: [Errno 2] No such file or directory: 'one.xml\ntwo.xml'

它将所有 xml 文件的路径放在一起,因此无法找到该文件。

如何在脚本中调用它:

python merge.py `find "path/" -type f -name "*.xml"` > "path/combined.xml"

标签: pythonxmlmerge

解决方案


的输出find "path/" -type f -name "*.xml"是分隔行的文件列表\n

您可以进行更改以正确拆分文件并传递给下一个函数。

if __name__ == "__main__":
    files = None
    if len(sys.argv[1:]) != 0:
        files = "".join(sys.argv[1:]).split('\n')
        run(files)
    else:
        raise Exception("Sorry, no files found")

推荐阅读