如何在Python中将XML文件读取为字典?已尝试方法报错求助
问题:无法将Garmin TCX格式XML转换为Python字典
问题背景
我参考了Stack Overflow上的几个回答,但都无法帮我将Garmin的TCX格式XML文件读取为简洁易用的Python字典。
尝试的代码及错误
第一个代码实现
from collections import defaultdict def etree_to_dict(t): d = {t.tag: {} if t.attrib else None} children = list(t) if children: dd = defaultdict(list) for dc in map(etree_to_dict, children): for k, v in dc.items(): dd[k].append(v) d = {t.tag: {k:v[0] if len(v) == 1 else v for k, v in dd.items()}} if t.attrib: d[t.tag].update(('@' + k, v) for k, v in t.attrib.items()) if t.text: text = t.text.strip() if children or t.attrib: if text: d[t.tag]['#text'] = text else: d[t.tag] = text return d with open('run.tcx', 'r') as f: data = f.read() from pprint import pprint pprint(etree_to_dict(data))
运行后触发错误:
Traceback (most recent call last): File "tester.py", line 33, in <module> pprint(etree_to_dict(data)) File "tester.py", line 8, in etree_to_dict d = {t.tag: {} if t.attrib else None} AttributeError: 'str' object has no attribute 'tag'
第二个代码实现
我还尝试了另一个转换函数:
import xml.etree.ElementTree as ET from copy import copy def dictify(r,root=True): if root: return {r.tag : dictify(r, False)} d=copy(r.attrib) if r.text: d["_text"]=r.text for x in r.findall("./*"): if x.tag not in d: d[x.tag]=[] d[x.tag].append(dictify(x,False)) return d
同样出现了上述AttributeError: 'str' object has no attribute 'tag'错误。
待处理的TCX文件开头内容
<?xml version="1.0" encoding="UTF-8"?><TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd"><Activities><Activity Sport="Running"><Id>2022-08-20T05:58:57Z</Id><Lap StartTime="2022-08-20T05:58:57Z"><Calories>1060.0</Calories><DistanceMeters>14468.162</DistanceMeters><TotalTimeSeconds>6259.0</TotalTimeSeconds><Track><Trackpoint>...
请问我是不是哪里操作有误?
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

