从多XML文件提取关键词并构建嵌套列表结构技术求助
解决XML关键词提取与嵌套列表结构构建问题
我看你现在的核心问题是没搭建好对应多字段的字典结构,而且原代码里的关键词提取逻辑没按每个文件分组存成子列表,最后变成了扁平的单层列表。咱们一步步来修正:
原代码的问题分析
- 只处理了
keywords字段,完全没提取symbol、jobno这些你需要的其他标签内容 - 初始化的
keywords = [[] for i in range(4)]根本没发挥作用,后续直接用append()把所有关键词堆进了一个列表,丢失了「每个文件对应一个关键词子列表」的层级
修正后的完整代码
import glob import os import xml.etree.ElementTree as et # 替换成你的XML文件所在路径 xml_path = "path/to/your/xml/files" # 初始化结果字典,每个字段对应空列表,keywords用来存每个文件的关键词子列表 result_dict = { 'symbol': [], 'jobno': [], 'dat': [], 'language': [], 'keywords': [] } # 遍历所有XML文件 for xml_file in glob.glob(os.path.join(xml_path, '*.xml')): tree = et.parse(xml_file) root = tree.getroot() # 提取单个值类型的字段(处理标签可能不存在的情况,避免报错) # 这里的XPath路径请根据你的实际XML结构调整,比如如果symbol在特定父节点下要修改路径 symbol_val = root.find(".//symbol").text if root.find(".//symbol") is not None else "" jobno_val = root.find(".//jobno").text if root.find(".//jobno") is not None else "" dat_val = root.find(".//dat").text if root.find(".//dat") is not None else "" language_val = root.find(".//language").text if root.find(".//language") is not None else "" # 将单个字段值添加到对应列表 result_dict['symbol'].append(symbol_val) result_dict['jobno'].append(jobno_val) result_dict['dat'].append(dat_val) result_dict['language'].append(language_val) # 提取当前文件的所有关键词,组成子列表 current_file_keywords = [] # 这里的XPath要匹配你XML里关键词的结构,比如如果是<keywords><kw>xxx</kw></keywords>就改成.//keywords/kw for keyword_node in root.find(".//keywords"): if keyword_node.text is not None: # 用strip()去除文本前后的空格/换行符,让结果更干净 current_file_keywords.append(keyword_node.text.strip()) # 将当前文件的关键词子列表添加到总keywords列表中 result_dict['keywords'].append(current_file_keywords) # 打印结果验证结构 print(result_dict)
关键说明
- 字典初始化:直接创建包含所有需要字段的字典,每个字段对应空列表,这样能清晰对应你期望的输出结构
- 按文件分组提取关键词:每个XML文件单独生成一个关键词子列表,再把这个子列表添加到
result_dict['keywords']中,就能得到「列表的列表」的层级 - 容错处理:用
if root.find(...) is not None判断标签是否存在,避免因某个文件缺少标签导致代码报错 - XPath调整:请根据你实际的XML标签结构修改XPath路径,比如如果关键词是放在
<keywords>下的<keyword>子标签里,那遍历的时候要写成root.findall(".//keywords/keyword")(注意这里用findall而不是find,因为要获取所有子节点)
这样处理后,你就能得到和期望完全一致的结构了——每个字段都是对应所有文件的列表,keywords是每个文件关键词子列表组成的嵌套列表。
内容的提问来源于stack exchange,提问作者terseason
相关产品推荐
相关产品推荐

