本书使用的文件、代码:https://github.com/huangtao36/data_wrangling



机器可读(machine readable)文件格式:
1、逗号分隔值(Comma-Separated Values, CSV)
2、JavaScript对象符号(JavaScript Object Notation, JSON)
3、可扩展标记语言(eXtensible Markup Language, XML)
 

第三章使用的数据文件:



XML数据

XML是一种标记语言,它具有包含格式化数据的文档结构。本质是也只是格式特殊的数据文件。
要处理的数据样本(XML基本数据格式):

XML中有两个位置可以保存数据:

    1、两个标签之间:<Display>71</Display>

    2、标签的属性:<Dim Category="SEX" Code="BTSX"/>——其中Category的属性值是“SEX”,Code的属性值是"BTSX"。

    XML的属性可以保存特定标签的额外信息,这些标签又嵌套在另一个标签中。

实现代码(基于Python3)

from xml.etree import ElementTree as ET

tree = ET.parse('data-text.xml')
root = tree.getroot() #获取树的根元素 data = root.find('Data') all_data = [] for observation in data:
record = {}
for item in observation:
lookup_key_List = list(item.attrib.keys())
lookup_key = lookup_key_List[0]
if lookup_key == 'Numeric':
rec_key = 'NUMERIC'
rec_value = item.attrib['Numeric']
else:
rec_key = item.attrib[lookup_key]
rec_value = item.attrib['Code']
record[rec_key] = rec_value
all_data.append(record) print (all_data)

输出(部分):

  (输出的是单行数据,为了直观,这里进行了处理。)

代码解释

from xml.etree import ElementTree as ET

本例中使用的是ElementTree、还可以使用lxml、minidom这两种库来解析XML文件,在此不做说明

获取Observation元素中的内容

  由上面的样本可知,我们使用的数据是包含在一个<Data>...</Data>中的,这里使用根元素的find方法可以利用标签名来搜索子元素。 

from xml.etree import ElementTree as ET

tree = ET.parse('data-text.xml')
root = tree.getroot() #获取树的根元素 data = root.find('Data') for observation in data:
for item in observation:
print(item.attrib)

输出(部分):

  

        输出的是<Observation>  ........</Observation>标签里面的内容
        我们的数据文件只有一个Data标签,如果有多个Data标签,可以将find函数改为findall函数来遍历。
    attrib:可以返回每一个节点的属性
 
  提取重要内容
     获得键的代码:

from xml.etree import ElementTree as ET

tree = ET.parse('data-text.xml')
root = tree.getroot() #获取树的根元素 data = root.find('Data') all_data = [] for observation in data:
record = {}
for item in observation:
lookup_key_List = list(item.attrib.keys())
lookup_key = lookup_key_List[0]
rec_key = item.attrib[lookup_key]
print(rec_key)
      输出:
        

      上面代码得到了数据的键,但还没有取得相应的值。 

lookup_key_List = list(item.attrib.keys())
lookup_key = lookup_key_List[0]
       这两句得到了每个属性键的名字,既是Category、code、Numeric这些,还没有得到键的值,加入rec_key = item.attrib[lookup_key]就获得了键的值。
      上面两句是Python3的写法,Python2中可以直接合并成一句:lookup_key = item.attrib.keys()[0]
 
      获得值的代码:  
from xml.etree import ElementTree as ET

tree = ET.parse('data-text.xml')
root = tree.getroot() #获取树的根元素 data = root.find('Data') all_data = [] for observation in data:
record = {}
for item in observation:
lookup_key_List = list(item.attrib.keys())
lookup_key = lookup_key_List[0]
if lookup_key == 'Numeric':
rec_key = 'NUMERIC'
rec_value = item.attrib['Numeric']
else:
rec_key = item.attrib[lookup_key]
rec_value = item.attrib['Code'] print(rec_key,rec_value)
    输出:
      

第三章——供机器读取的数据(XML)的更多相关文章

  1. 第三章——供机器读取的数据(CSV与JSON)

    本书使用的文件.代码:https://github.com/huangtao36/data_wrangling 机器可读(machine readable)文件格式: 1.逗号分隔值(Comma-Se ...

  2. python数据处理(一)之供机器读取的数据 csv,json,xml

    代码与资料 https://github.com/jackiekazil/data-wrangling 1 csv 1.1导入csv数据 1.2将代码保存到文件中并在命令行中运行 2.json 2 导 ...

  3. 第三章:使用ListView展示数据

    一.ImageList:存储图像集合 Images 存储的所有图像 ImageSize 图像的大小 ColorDepth 颜色数 TransparentColor 被视为透明的颜色 先设置ColorD ...

  4. 数据库-第三章 关系数据库标准语言SQL-3.3 数据查询

    数据查询 例: 一.单表查询 1.定义 是指仅涉及一个表的查询 2.选择表中的若干列 查询指定列 例: 查询全部列 例: 查询经过计算的值 例: 3.选择表中的若干元组 消除取值重复的行 例: 查询满 ...

  5. SQL SERVER 2012 第三章 使用INSERT语句添加数据

    INSERT [TOP (<expression>) [PERCENT] [INTO] <tabular object>[(column list)][OUTPUT <o ...

  6. (第二章第三部分)TensorFlow框架之读取二进制数据

    系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html (第二章第二部分)Tens ...

  7. Laxcus大数据管理系统2.0(5)- 第三章 数据存取

    第三章 数据存取 当前的很多大数据处理工作,一次计算产生几十个GB.或者几十个TB的数据已是正常现象,驱动数百.数千.甚至上万个计算机节点并行运行也已经不足为奇.但是在数据处理的后面,对于这种在网络间 ...

  8. CentOS6安装各种大数据软件 第三章:Linux基础软件的安装

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  9. (第二章第二部分)TensorFlow框架之读取图片数据

    系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html 本文概述: 目标 说明图片 ...

随机推荐

  1. eclipse 安装 lombok

    转载自http://bbs.itmayiedu.com/article/1527769518449 由于项目中有 @Slf4j 注解等,而 eclipse 需要安装 lombok 插件才能正常编译.由 ...

  2. swoole学习(二)----搭建server和client

    1.搭建server 1.1搭建server.php 1.搭建websocket服务器,首先建立 server.php 文件, <?php $server = new swoole_websoc ...

  3. Linux字符设备学习,总结

    注册字符驱动的一种老方法: 注册一个字符设备的经典方法是使用:int register_chrdev(unsigned int major, const char *name, structfile_ ...

  4. Python学习 :装饰器

    装饰器(函数) 装饰器作为一个函数,可以为其他函数在不修改原函数代码的前提下添加新的功能 装饰器的返回值是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等 ...

  5. Python学习手册之字符类和元字符深入

    在上一篇文章中,我们介绍了 Python 的正则表达式和元字符,现在我们介绍 Python 的字符类和对元字符进行深入讲解.查看上一篇文章请点击:https://www.cnblogs.com/dus ...

  6. python教程(二)·循环语句

    计算机程序中常常需要重复执行某些语句,我们总不能将同一语句写上百遍吧?所以在python中,当然其它计算机语言也是,有一种语句可以重复执行相同的操作,这种语句就是 "循环语句",而 ...

  7. ISAP学习笔记

    学完了ISAP,感觉心情舒畅,毕竟ISAP比Dinic好一点. 说到底ISAP其实是Dinic(不熟悉Dinic的人去我的博客找猴子课堂----最大流与最小割(看看思想),已经置顶)优化版,熟悉的人知 ...

  8. 对fgets的理解

    gets()函数 因为用gets函数输入数组时,只知道数组开始处,不知道数组有多少个元素,输入字符过长,会导致缓冲区溢出,多余字符可能占用未使用的内存,也可能擦掉程序中的其他数据,后续用fgets函数 ...

  9. Java基础之this和super关键字用法

    this 在java中,this是一个引用当前类对象的引用变量,主要有以下几种用法: 引用当前类的实例变量· this关键字可以用来引用当前类的实例变量.如果实例变量和某个方法的参数之间存在歧义(实例 ...

  10. 【转】PG数据库高级用法 之 12306 -- 链接

    这么牛的文章很少见,仅附链接,以示敬仰. https://github.com/digoal/blog/blob/master/201611/20161124_02.md