xml - 为什么这个简单的 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>
解决方案
问题是您正在使用inputPath
and fileName
(absolute path) 来读取现有路径并且仅filename
(relative path) 来写入它:
阅读:
xmlTree = et.parse(self.inputPath+self.fileName)
写作:
xmlTree.write(self.fileName)
您可能想要做的是将写作部分替换为:
xmlTree.write(self.inputPath + self.fileName)
否则,您会将数据写入相对于当前工作目录的文件,这似乎不是预期的行为。
顺便说一句:您应该考虑处理您尝试读取或写入的文件不存在/无法读取/无法写入的情况 - 某种异常处理将在在此点餐 :-)
推荐阅读
- node.js - Why getting error when request docusign JWT token
- ios - How to reload Linechart Data which is coming from external API in Swift?
- java - How to fix java.lang.SecurityException Android 4.2.2
- excel - 使用do while我如何填充等于数据透视表中特定单元格值的空白?
- hyperledger-fabric - 如何将 RCA PEM 文件从 RCA 复制到 ICA?
- c# - Line Renderer 的线在 (0, 0, 0) 处保持连接
- sql-server - 如何修复“启动用户态代理时出错:在 Windows 10 上使用 docker 侦听 tcp 0.0.0.0:1433
- sql-server - 如何将此存储过程从 SQL Server 转换为 Postgresql?
- sql-server - Disable_error_and_usage_SQLserver
- javascript - 将图像转换为 Data URI Base64 的问题