Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个简单的python3类不覆盖/修改现有的xml文件?_Xml_Python 3.x - Fatal编程技术网

为什么这个简单的python3类不覆盖/修改现有的xml文件?

为什么这个简单的python3类不覆盖/修改现有的xml文件?,xml,python-3.x,Xml,Python 3.x,我在python3中有以下简单的初学者XML类。在这里,我只需输入xml文件的名称和文件的路径作为参数,然后我只想通过覆盖将新内容附加到文件中。我有下面的目录树 main |--data | |--aesxml | |--test.xml |--img | |--xmlClass.py | |--test.xml 如果我运行位于同一文件夹中的test.xml的代码,它将按预期工作。但是,如果我为data文件夹中的test.xml运行它,它仍然会运行,没有任何错误,但不会写入/修改

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

main
|--data
|  |--aesxml
|     |--test.xml
|--img
|  |--xmlClass.py
|  |--test.xml
如果我运行位于同一文件夹中的test.xml的代码,它将按预期工作。但是,如果我为
data
文件夹中的test.xml运行它,它仍然会运行,没有任何错误,但不会写入/修改文件中的任何内容。 我刚刚开始学习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>

做记号
(0,1)

问题在于,您正在使用
输入路径
文件名
(绝对路径)读取现有路径,而仅使用
文件名
(相对路径)写入路径:

阅读:

xmlTree = et.parse(self.inputPath+self.fileName)
写作:

xmlTree.write(self.fileName)
您可能想做的是用以下内容替换书写部分:

xmlTree.write(self.inputPath + self.fileName)
否则,您将数据写入相对于当前工作目录的文件,这似乎不是预期的行为


顺便说一句:您应该考虑处理您试图读取或写入的文件不存在/无法读取/无法写入的情况-这里需要某种异常处理:-)

问题是您使用的是
输入路径
文件名
(绝对路径)要读取现有路径并仅写入
文件名
(相对路径),请执行以下操作:

阅读:

xmlTree = et.parse(self.inputPath+self.fileName)
写作:

xmlTree.write(self.fileName)
您可能想做的是用以下内容替换书写部分:

xmlTree.write(self.inputPath + self.fileName)
否则,您将数据写入相对于当前工作目录的文件,这似乎不是预期的行为


顺便说一句:您应该考虑处理您试图读取或写入的文件不存在/无法读取/无法写入的情况-这里需要某种异常处理:-)

这样一个新手错误,谢谢。是的,我要补充一点:)这样一个新手的错误,谢谢你。是的,我要补充一点:)