Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
在Python中编辑XML文件中的项_Python_Xml_Xml.etree - Fatal编程技术网

在Python中编辑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>

我试图从.csv文件中获取数据,并为每一行创建单独的.xml文件。我已经把.csv读入熊猫了。我正在努力找出如何在.xml文件中进行编辑

我以前面的答案作为指导,试图了解以下内容:

将作者的解决方案应用于我的数据将如下所示:

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"