我在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 :(得分:0)
问题是您使用inputPath
和fileName
(绝对路径)读取现有路径,而仅使用filename
(相对路径)写入路径:
阅读:
xmlTree = et.parse(self.inputPath+self.fileName)
写作:
xmlTree.write(self.fileName)
您可能想要做的是用以下内容代替写作部分:
xmlTree.write(self.inputPath + self.fileName)
否则,您会将数据写入相对于当前工作目录的文件,这似乎不是预期的行为。
顺便说一句:您应该考虑处理以下情况:尝试读取或写入的文件不存在/无法读取/无法写入-在这里可以进行某种异常处理:-)