0

0

Python ElementTree:将XML标签属性提取为字典列表

霞舞

霞舞

发布时间:2025-10-11 13:14:01

|

207人浏览过

|

来源于php中文网

原创

Python ElementTree:将XML标签属性提取为字典列表

本教程详细介绍了如何使用python的`xml.etree.elementtree`模块,从xml文件中解析特定标签的属性,并将其高效地收集到一个python字典列表中。通过初始化空列表并在循环中追加每个元素的`attrib`字典,可以轻松实现结构化数据提取,方便后续数据处理和分析。

引言:XML属性提取的需求

XML(可扩展标记语言)作为一种广泛使用的数据交换和存储格式,其结构化特性使其在多种应用场景中扮演着重要角色。在处理XML数据时,一个常见的任务是提取特定标签的属性信息。例如,我们可能需要从一系列 标签中,将每个字段的所有属性(如DATATYPE、FIELDNUMBER等)作为独立的字典,并最终将这些字典收集到一个Python列表中,以便于后续的数据处理、分析或存储。

核心工具:xml.etree.ElementTree模块

Python标准库中的 xml.etree.ElementTree 模块提供了一个轻量级且高效的API,用于解析和操作XML文档。它将XML文档表示为一个树形结构,其中每个标签都被视为一个“元素”(Element),其属性则存储在元素的 attrib 字典中。

实现步骤:将XML属性收集到列表

要将XML文件中特定标签的属性提取并存储为一个字典列表,主要步骤如下:

  1. 导入模块与解析XML文件:首先需要导入 xml.etree.ElementTree 模块,并使用 ET.parse() 方法解析XML文件,获取XML树的根元素。
  2. 初始化结果列表:在开始遍历XML元素之前,创建一个空的Python列表。这个列表将用于存储所有提取到的属性字典。这是关键一步,确保列表在循环外部定义,以便所有属性字典都能被追加到同一个列表中。
  3. 遍历元素并提取属性:使用 root.iter('TAG_NAME') 方法遍历XML文档中所有指定名称的标签。对于每个找到的元素,其属性可以通过 element.attrib 访问,这是一个包含所有属性名-值对的字典。然后,将这个属性字典追加到之前初始化的结果列表中。

下面是根据上述步骤实现的完整示例代码:

立即学习Python免费学习笔记(深入)”;

HTTPie AI
HTTPie AI

AI API开发工具

下载
import xml.etree.ElementTree as ET
import os

# 定义XML文件路径
# 请将此路径替换为您的实际XML文件路径
xml_file_path = 'C:\\Users\\dd00849401\\Desktop\\xml\\m_DM_DIM_NRC_CUSTOMER.xml'

# 检查文件是否存在
if not os.path.exists(xml_file_path):
    print(f"错误:文件 '{xml_file_path}' 不存在。")
    exit()

try:
    # 解析XML文件
    tree = ET.parse(xml_file_path)
    root = tree.getroot()
    print("XML文件解析成功。")
except ET.ParseError as e:
    print(f"错误:XML文件解析失败。请检查文件格式是否正确。详细信息:{e}")
    exit()
except Exception as e:
    print(f"发生未知错误:{e}")
    exit()

# 初始化一个空列表,用于存储所有SOURCEFIELD的属性字典
sourcefields_attributes = []

print("\n*********** 源数据详情 ***********")
# 遍历所有的'SOURCE'标签
for source in root.iter('SOURCE'):
    sourcename = source.attrib.get('NAME', 'N/A') # 使用.get()方法获取属性,避免KeyError
    print(f"\n源名称: {sourcename}")
    print(f"*********** 源 '{sourcename}' 的详细信息: ***********")
    print(source.attrib)
    print(f"*********** 源 '{sourcename}' 的列名信息: ***********")

    # 在每个'SOURCE'标签内部,遍历所有的'SOURCEFIELD'标签
    for sourcefields in source.iter("SOURCEFIELD"):
        # 打印当前SOURCEFIELD的属性字典
        print(sourcefields.attrib)
        # 将当前SOURCEFIELD的属性字典追加到列表中
        sourcefields_attributes.append(sourcefields.attrib)

# 打印最终收集到的所有SOURCEFIELD属性的列表
print("\n*********** 最终收集到的SOURCEFIELD属性列表 ***********")
print(sourcefields_attributes)

代码解析与输出

上述代码首先导入了必要的模块并指定了XML文件路径。它包含了基本的错误处理,以确保文件存在且XML格式正确。

  1. sourcefields_attributes = []:在所有循环外部,我们初始化了一个名为 sourcefields_attributes 的空列表。这个列表将作为最终结果的容器。
  2. for source in root.iter('SOURCE')::这个循环用于遍历XML文档中所有的 标签。
  3. for sourcefields in source.iter("SOURCEFIELD")::这是一个嵌套循环,对于每个 标签,它会继续遍历其内部所有的 标签。
  4. sourcefields_attributes.append(sourcefields.attrib):这是核心操作。sourcefields.attrib 会返回当前 元素的所有属性,以字典的形式表示(例如 {'BUSINESSNAME': '', 'DATATYPE': 'varchar', ...})。append() 方法将这个字典添加到 sourcefields_attributes 列表中。

执行上述代码后,您将获得如下格式的输出(具体内容取决于您的XML文件):

XML文件解析成功。

*********** 源数据详情 ***********

源名称: SOME_SOURCE_NAME
*********** 源 'SOME_SOURCE_NAME' 的详细信息: ***********
{'NAME': 'SOME_SOURCE_NAME', 'TYPE': 'Flat File'}
*********** 源 'SOME_SOURCE_NAME' 的列名信息: ***********
{'BUSINESSNAME': '', 'DATATYPE': 'varchar', 'DESCRIPTION': '', 'FIELDNUMBER': '1'}
{'BUSINESSNAME': '', 'DATATYPE': 'numeric', 'DESCRIPTION': '', 'FIELDNUMBER': '2'}
{'BUSINESSNAME': '', 'DATATYPE': 'timestamp', 'DESCRIPTION': '', 'FIELDNUMBER': '3'}

*********** 最终收集到的SOURCEFIELD属性列表 ***********
[{'BUSINESSNAME': '', 'DATATYPE': 'varchar', 'DESCRIPTION': '', 'FIELDNUMBER': '1'},
 {'BUSINESSNAME': '', 'DATATYPE': 'numeric', 'DESCRIPTION': '', 'FIELDNUMBER': '2'},
 {'BUSINESSNAME': '', 'DATATYPE': 'timestamp', 'DESCRIPTION': '', 'FIELDNUMBER': '3'}]

注意事项与最佳实践

  • 文件路径: 确保XML文件的路径是正确的。在生产环境中,通常建议使用绝对路径或基于脚本位置的相对路径。
  • 错误处理: 示例代码中增加了对文件是否存在和XML解析错误的 try-except 块。这在处理外部文件时是必不可少的,可以防止程序因文件问题而崩溃。
  • 属性访问: 当访问元素的属性时,如果属性可能不存在,建议使用 element.attrib.get('attribute_name', default_value) 而不是直接 element.attrib['attribute_name']。get() 方法允许您提供一个默认值,以避免在属性不存在时引发 KeyError。
  • XML结构变化: 如果XML文档的结构发生变化,您可能需要调整 iter() 方法中的标签名或遍历逻辑。
  • 内存使用: 对于非常大的XML文件,ET.parse() 会将整个文件加载到内存中。如果内存成为问题,可以考虑使用 ET.iterparse() 进行增量解析,但这会增加代码的复杂性。

总结

通过 xml.etree.ElementTree 模块,我们可以高效地解析XML文档,并利用简单的列表追加操作,将特定标签的所有属性提取并组织成一个字典列表。这种方法不仅代码简洁,而且能够将XML的结构化数据转换为Python中易于操作的数据结构,为后续的数据处理和分析奠定了基础。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

715

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

625

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

739

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1235

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

575

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

698

2023.08.11

小游戏4399大全
小游戏4399大全

4399小游戏免费秒玩大全来了!无需下载、即点即玩,涵盖动作、冒险、益智、射击、体育、双人等全品类热门小游戏。经典如《黄金矿工》《森林冰火人》《狂扁小朋友》一应俱全,每日更新最新H5游戏,支持电脑与手机跨端畅玩。访问4399小游戏中心,重温童年回忆,畅享轻松娱乐时光!官方入口安全绿色,无插件、无广告干扰,打开即玩,快乐秒达!

30

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 2.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号