在Python中编辑XML文件中的项
我试图从.csv文件中获取数据,并为每一行创建单独的.xml文件。我已经把.csv读入熊猫了。我正在努力找出如何在.xml文件中进行编辑 我以前面的答案作为指导,试图了解以下内容: 将作者的解决方案应用于我的数据将如下所示:在Python中编辑XML文件中的项,python,xml,xml.etree,Python,Xml,Xml.etree,我试图从.csv文件中获取数据,并为每一行创建单独的.xml文件。我已经把.csv读入熊猫了。我正在努力找出如何在.xml文件中进行编辑 我以前面的答案作为指导,试图了解以下内容: 将作者的解决方案应用于我的数据将如下所示: data = """<annotation> <folder>VOC2007</folder> <filename>abc.jpg</filename> <object>
data = """<annotation>
<folder>VOC2007</folder>
<filename>abc.jpg</filename>
<object>
<name>blah</name>
<pose>unknown</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>0</xmin>
<ymin>0</ymin>
<xmax>0</xmax>
<ymax>0</ymax>
</bndbox>
</object>
</annotation>
"""
for data in tree.findall("data"):
filename = data.find("filename")
filename.text = "001.jpg"
我陷入困境的是下一部分。作者使用以下代码行编辑其文件:
for data in tree.findall("data"):
name = data.attrib["name"]
value = data.find("value")
value.text = "[%s] %s" % (name, value.text)
我试着把它应用到我自己身上,就像这样:
data = """<annotation>
<folder>VOC2007</folder>
<filename>abc.jpg</filename>
<object>
<name>blah</name>
<pose>unknown</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>0</xmin>
<ymin>0</ymin>
<xmax>0</xmax>
<ymax>0</ymax>
</bndbox>
</object>
</annotation>
"""
for data in tree.findall("data"):
filename = data.find("filename")
filename.text = "001.jpg"
但当我把它打印出来时,这似乎并没有改变任何事情
print(et.tostring(tree))
我做错了什么,或者需要采取什么步骤才能将图像名称从“abc.jpg”编辑到“001.jpg”
还试图找出如何更改四个项xmin、ymin、xmax和ymax的值 我假设您读取了CSV文件并提取了一组类似词典的记录,例如:
record = {
'folder': "VOC2007",
'filename': "abc.jpg",
'name': "blah",
'pose': "unknown",
'truncated': "0",
'difficult': "0",
'xmin': "0",
'ymin': "0",
'xmax': "0",
'ymax': "0",
}
您可以做的一件简单的事情是使用字符串模板生成XML内容(因为它非常简单):
该函数用于将“”和“&”转换为XML实体
结果是:
<annotation>
<folder>VOC2007</folder>
<filename>abc.jpg</filename>
<object>
<name>blah</name>
<pose>unknown</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>0</xmin>
<ymin>0</ymin>
<xmax>0</xmax>
<ymax>0</ymax>
</bndbox>
</object>
</annotation>
VOC2007
abc.jpg
废话
未知的
0
0
0
0
0
0
我的偏好在于使用。但是从您发布的链接来看,似乎您希望从标记中生成.find(“文件名”),而不是标记(xml数据中没有标记,注释中也有说明)
也就是说,您的代码可以“最小限度地”(我不太了解ElementTree,无法说出最佳解决方案)更改为以下内容:
for annotation in tree.findall("annotation")
filename = annotation.find("filename")
filename.text = "001.jpg"
关于
tree.findall(“数据”)
您的xml中似乎没有任何
标记您所说的“xml文件”是什么意思?这里没有xml文件。它只是一个xml字符串(可能会被修改)。你如何测试它是否改变了什么?您是否错过了URL中的最后一行:print(ET.tostring(tree))
?正确,没有.xml文件,因为我试图从.csv中的数据创建它们。我有一个.xml文件的模板。但是,我需要弄清楚如何在Python中编辑.xml文件中的数据,然后才能这样做。最后还应用了打印行;这不是问题,这太棒了。比xml.etree更容易理解。非常感谢!
for annotation in tree.findall("annotation")
filename = annotation.find("filename")
filename.text = "001.jpg"