最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

python编程处理XML文本

XAMPP案例 admin 651浏览 0评论

对于xml文本,利用python有三种方法解析:SAX,DOM和ElementTree

  • DOM(Document Object Model)该方式一次性读取整个文档,把文档中所有元素存在内存中的一个树结构 里,之后利用DOM提供的函数来读取该文档的内容和结构,也可以把修改过的内容写入XML文件。如果XML文本较大,会很耗内存,故DOM适用于处理较小的XML文件。
  • SAX(simple API for XML)SAX是用的是事件驱动模型其一边读文件一边解析,占用内存少。利用SAX解析XML文档牵涉到两个部分: 解析器事件处理器。解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件。而事件处理器则负责对事件作出响应,对传递的XML数据进行处理。在python中使用sax方式处理xml要先引入xml.sax中的parse函数,还有xml.sax.handler中的ContentHandler
  • ElementTree(元素树)ElementTree 相对于 DOM 来说拥有更好的性能,与 SAX 性能差不多,API 使用也很方便。

本文记录利用DOM解析XML文本

现有手机导出的运动数据如下

dy00057

提取脚本如下:

"""
从xml文件中读取运动数据,提取时间、运动步数
作者:挨踢的土木佬
"""from typing import Collection
from xml.dom.minidom import parse
import xml.dom.minidom as dom
import datetime # 时间处理模块

filename = "导出.xml"
# 使用minidom解析器打开 XML 文档
DOMTree = dom.parse(filename)
data_collection = DOMTree.documentElement
health_data = data_collection.getElementsByTagName("Record")

StepDict = {}
for data in health_data:
    record_type = data.getAttribute("type")
    if record_type == "HKQuantityTypeIdentifierStepCount":
        sourceName = data.getAttribute("sourceName")
        startDate = data.getAttribute("startDate")
        endDate = data.getAttribute("endDate")
        value = data.getAttribute("value")
        if sourceName == "小米运动": ## 先过滤出小米运动的步行数据
            # print(startDate,value)
            start_date = datetime.datetime.strptime(startDate.replace(" +0800",""),"%Y-%m-%d %H:%M:%S")
            start_date_formated = start_date.strftime("%Y%m%d") # 格式化时间
            if start_date_formated in StepDict.keys():
                StepDict[start_date_formated] += int(value)
            else:                StepDict[start_date_formated] = int(value)

# 对时间进行排序
sorted_list = sorted( StepDict.items() , key = lambda x:x[0] , reverse=False  )
fr = open("stepdata.txt","w")
for li in sorted_list:
    fr.write("{},{}\n".format(li[0],li[1]))
fr.close()

绘制出运动数据,利用plt.bar函数:

"""
绘制步数
"""
import matplotlib.pyplot as plt

def read_step_data(file):
    fr = open(file,"r")
    px,py = [],[]
    for line in fr.readlines():
        data = line.split(",")
        px.append(data[0])
        py.append(int(data[1]))
    fr.close()
    return px,py

fig = plt.figure()
ax = fig.add_subplot(111)
plotx,ploty = read_step_data("stepdata.txt")
plotx = [d for d in range(len(plotx))]
ax.bar(plotx,ploty)
plt.show()

dy000057

转载请注明:XAMPP中文组官网 » python编程处理XML文本

您必须 登录 才能发表评论!