首页 > 解决方案 > 为什么这个简单的 python3 类不会覆盖/修改现有的 xml 文件?

问题描述

我在 python3 中有以下简单的初学者 XML 类。我只是输入 xml 文件的名称和文件的路径作为参数,然后我只想通过覆盖将新内容附加到文件中。我有以下目录树。

main
|--data
|  |--aesxml
|     |--test.xml
|--img
|  |--xmlClass.py
|  |--test.xml

如果我运行位于同一文件夹中的 test.xml 的代码,它将按预期工作。但是,如果我为文件夹中的 test.xml 运行它,data它仍然可以正常运行,但不会在文件中写入/修改任何内容。我刚刚开始在 python 中学习 xmls,对此我感到很困惑。尝试encoding='utf-8'xmlTree.write()函数中添加一个,但它仍然没有做任何事情。

class TestXML:

    def __init__(self,xmlInPath,xmlfile):
        self.inputPath = xmlInPath
        self.fileName = xmlfile

    def writeXML(self,newCandidateName,newCandidateCentroid):
        xmlTree = et.parse(self.inputPath+self.fileName)
        root = xmlTree.getroot()

        newContest = et.SubElement(root,"contest",attrib={"position":"0"})
        newCandidate = et.SubElement(newContest,"candidate",attrib={"code":"0"})

        candidateName = et.SubElement(newCandidate,"name")
        candidateCentroid = et.SubElement(newCandidate,"centroid")

        candidateName.text = newCandidateName
        candidateCentroid.text = newCandidateCentroid

        xmlTree.write(self.fileName)


if __name__ == '__main__':
    xmlTest = TestXML("/home/main/img/","test.xml")
    xmlTest.writeXML("John","(0,1)")

这是基本的 XML 文件:

<?xml version='1.0' encoding='utf-8'?>
<config title="Test">
    <contest position="0">
        <candidate code="0">
            <name>Mark</name>
            <centroid>(0,1)</centroid>
        </candidate>
    </contest>
</config>

标签: xmlpython-3.x

解决方案


问题是您正在使用inputPathand fileName(absolute path) 来读取现有路径并且仅filename(relative path) 来写入它:

阅读:

xmlTree = et.parse(self.inputPath+self.fileName)

写作:

xmlTree.write(self.fileName)

您可能想要做的是将写作部分替换为:

xmlTree.write(self.inputPath + self.fileName)

否则,您会将数据写入相对于当前工作目录的文件,这似乎不是预期的行为。

顺便说一句:您应该考虑处理您尝试读取或写入的文件不存在/无法读取/无法写入的情况 - 某种异常处理将在在此点餐 :-)


推荐阅读