微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以使用python打开XML文件,对其进行格式化,然后再次保存吗?

如何解决我可以使用python打开XML文件,对其进行格式化,然后再次保存吗?

您好,Python开发人员,

我想编写一个Python脚本,它将在目录中搜索扩展名为“ .err”的任何文件,然后格式化该文件(这是XML格式),然后以正确的格式覆盖该文件。这是我到目前为止的代码

import xml.dom.minidom
import glob
import os

path = "/qond/apps/tomcat_qx/webapps/qxiqonddb/qxtendQueues/qdocqueue/responses/"

os.chdir(path)
for file in glob.glob("*.err"):

    with open(path + file) as f:
        xml_data = f.read()
        xml = xml.dom.minidom.parse(xml_data)
        xml_formatted = dom.toprettyxml()
        f.write(xml_formatted)
        f.close()

非常感谢!

编辑: 我在上面的代码中遇到的当前问题是:

Traceback (most recent call last):
  File "qxtend_formatter.py",line 12,in <module>
    xml = xml.dom.minidom.parse(xml_data)
  File "/usr/lib64/python2.6/xml/dom/minidom.py",line 1918,in parse
    return expatbuilder.parse(file)
  File "/usr/lib64/python2.6/xml/dom/expatbuilder.py",line 922,in parse
    fp = open(file,'rb')
IOError: [Errno 36] File name too long: '<?xml version="1.0" encoding="UTF-8"?>\n<soapenv:Envelope xmlns:soapenv="http://schemas.xm.....

似乎它试图将文件名保存为文件内容,但我希望它保留所有文件名。

解决方法

我已经通过做两件事解决了这个问题:

  1. 确保OS用户具有对该文件(chmod 777)的完全访问权限
  2. 创建一个“ .f”实例来读取文件,并创建一个“ .fl”实例来写入文件

我的代码现在看起来像这样:

from xml.dom import minidom
import glob
import os

path = "/qond/apps/tomcat_qx/webapps/qxiqonddb/qxtendQueues/qdocqueue/responses/"

os.chdir(path)
for file in glob.glob("*.err"):
    with open(file,"r") as f:
        xml_data = f.read()
        doc = minidom.parseString(xml_data)
        with open(file,"w") as fl:
            fl.write(doc.toprettyxml(indent="  ",newl="\n"))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。