本书使用的文件、代码: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)
    输出:
      

最新文章

  1. composer安装yii2问题总结
  2. x01.os.20: compile linux-0.11 on the ubuntu
  3. oracle数据导入/导出
  4. shell实现trim函数-去除字符串两侧的空格(包括tab,space键)
  5. Linux软件的安装与卸载
  6. asp实现关键词不区分大小写搜索并高亮显示
  7. Layer中自定义属性的动画
  8. HDU 5904 - LCIS (BestCoder Round #87)
  9. MySQL字符集编码
  10. mvc拦截器
  11. iOS 面试大全从简单到复杂(简单篇)
  12. Oracle主键异常处理
  13. iOS tableView移除某一行的分割线 让分割线宽度为整个cell的宽度
  14. MySQL快速入门 基本技能篇
  15. JVM笔记4-对象的创建
  16. Android颜色配置器
  17. c/c++ 网络编程 单纯http客户端,服务器端
  18. Windows 2008 R2 域控制器防止意外删除现有OU的设置
  19. vue监听滚动事件-元素固定位置显示
  20. exception The valid characters are defined in RFC 7230 and RFC 3986

热门文章

  1. 常见IE8兼容性问题及解决
  2. C#的哈希表Hashtable同步方法
  3. Case Helper
  4. vmware 虚拟机设置 redhat 桥接模式
  5. 流程控制之--if。
  6. 网站漏洞检测之WordPress 5.0.0 系统修复方案
  7. (数据科学学习手札42)folium进阶内容介绍
  8. STM32堆栈指针疑问
  9. linux下免安装版本mysql5.5 配置
  10. java对象创建过程简介