You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python解析XML文件数据报错及格式输出问题求助

解决XML解析的KeyError和格式输出问题

我来帮你搞定这两个问题!咱们一步步拆解问题和解决方案:

1. 解决KeyError: 'color'的问题

你遇到的错误根源很明确:in_shippingin_production标签里的colorplace子元素,不是标签自身的属性(attrib),而stock标签的colorplace才是属性。所以代码里不能统一用j.attrib来获取值,得先判断当前处理的是哪种标签,分开处理:

  • 对于in_shippingin_production:需要通过子元素查找来获取colorplace的文本值
  • 对于stock:直接通过attrib字典获取colorplace属性,再获取标签内的库存数值

2. 实现一行格式输出

不要在循环里每次都print,那样会导致内容分散换行。我们可以把所有需要输出的内容收集到一个列表里,最后用空格把列表元素拼接成完整的字符串,一次性输出。

修改后的完整代码

import xml.etree.ElementTree as ET

def data():
    tree = ET.parse('stack.xml')
    root = tree.getroot()
    output = []  # 用来统一收集所有要输出的数据
    for car in root:
        for elem in car:
            if elem.tag in ('in_shipping', 'in_production'):
                # 处理带color/place子元素的标签
                color = elem.find('color').text
                place = elem.find('place').text
                output.extend([color, place])
            elif elem.tag == 'stock':
                # 处理带color/place属性的标签
                color = elem.attrib['color']
                place = elem.attrib['place']
                count = elem.text.strip()  # 去掉可能的空白字符
                output.extend([color, place, count])
    # 把列表元素用空格拼接成一行输出
    print(' '.join(output))

data()

运行结果

执行这段代码后,控制台会输出你期望的格式内容:

red 4 blue 2 red 1 4 green 2 1 blue 3 6 purple 4 7 silver 2 black 1 green 2 1 red 1 4 blue 3 6

内容的提问来源于stack exchange,提问作者riram

火山引擎 最新活动