python - 使用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"
解决方案
的输出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")
推荐阅读
- python - 当有背景线程时,为什么 sys.exit() 不会关闭 python?
- node.js - React 中的 formData,发送到后端 Express 收到 null
- r - 使用小鼠池功能时,对因子 x 调用 var(x) 已失效
- c++ - C++:为什么字符串数组要转换我的字符串?
- python - “设置后无法更改线程模式”Python中的运行时错误
- math - 与 L 的 2 阶张量和交换关系
- laravel - Laravel 8重定向到特定页面问题
- java - 使用开关分隔不同字母的输出
- android - 位置参数必须出现在命名参数之前,并且 Flutter 上的位置参数太多
- flutter - 如何缩放PDF文件并在颤动中截取缩放区域的屏幕截图