在Python中连接XML文件中的值

2024-06-25 05:57:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试连接xml属性,但它只接受第一对,然后从新项的属性开始。当你通读这个文件时,它会有意义的。在

import os, csv
from xml.etree import ElementTree


file_name = 'data.xml'
full_file = os.path.abspath(os.path.join('xml', file_name))
dom = ElementTree.parse(full_file)

with open('output.csv', 'w', newline="") as f: 
    writer = csv.writer(f)
    writer.writerow(['fruitNumber', 'categoryNumber', 'Group', 'AttributeValueName'])



for d in dom.findall('//item'):
    part = d.find('.//item-number').text
    name = d.find('.//name').text
    value = d.find('.//value').text 
    writer.writerow([part, '' , '', name + ":" + value])

这是我的xml文件:

^{pr2}$

我得到的是:

fruitNumber categoryNumber  Group   AttributeValueName
449                                 FRUIT:Lemon
223                                 FRUIT:Orange

我想得到的是:

fruitNumber categoryNumber  Group   AttributeValueName
449                                 FRUIT:Lemon│COLOR:Yellow
223                                 FRUIT:Orange│COLOR:Orange

提前感谢您的帮助!!!在


Tags: csvtextnamevalueosgroupxmlfind
1条回答
网友
1楼 · 发布于 2024-06-25 05:57:52

你只读取每个项目的第一个属性。您需要在该项下另外搜索属性,收集它们,然后在编写行时根据需要设置它们的格式:

import os, csv
from xml.etree import ElementTree


file_name = 'data.xml'
full_file = os.path.abspath(os.path.join('xml', file_name))
dom = ElementTree.parse(full_file)

with open('output.csv', 'w', newline="") as f: 
    writer = csv.writer(f)
    writer.writerow(['fruitNumber', 'categoryNumber', 'Group', 'AttributeValueName'])

    for d in dom.findall('.//item'):
        part = d.find('.//item-number').text
        L = []
        for a in d.findall('.//attribute'):
            name = a.find('.//name').text
            value = a.find('.//value').text
            L.append('{}:{}'.format(name,value))
        writer.writerow([part, '' , '', '|'.join(L)])

输出

fruitNumber,categoryNumber,Group,AttributeValueName
449,,,FRUIT:Lemon|COLOR:Yellow
223,,,FRUIT:Orange|COLOR:Orange

相关问题 更多 >