前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python数据处理(一):处理 JSON、XML、CSV 三种格式数据

Python数据处理(一):处理 JSON、XML、CSV 三种格式数据

原创
作者头像
程序员鑫港
发布于 2021-12-30 07:02:21
发布于 2021-12-30 07:02:21
4.2K00
代码可运行
举报
文章被收录于专栏:python12python12
运行总次数:0
代码可运行

Python 数据处理系列博客来啦!

本系列将以《Python数据处理》这本书为基础,以书中每章一篇博客的形式带大家一起学习 Python 数据处理。书中有些地方讲的不太详细,我会查阅其他资料来补充,力争每篇博客都把知识点涵盖全且通俗易懂。

这本书主要讲了如何用 Python 处理各种类型的文件,如 JSONXML、CSV、Excel、PDF 等。后面几章还会讲数据清洗、网页抓取、自动化和规模化等使用技能。我也是 Python 初学者,将以初学者的角度写文章,所以博客对初学者比较友好。

前言

以易于机器理解的方式来存储数据的文件格式,通常被称作机器可读的 (machine readable)。常见的机器可读格式包括:

  • 逗号分隔值(Comma-Separated Values,CSV)
  • JavaScript 对象符号(JavaScript Object Notation,JSON)
  • 可扩展标记语言(eXtensible Markup Language,XML)

在口语和书面语中,提到这些数据格式时通常使用它们的短名字(如 CSV)。 我们将使用这些缩写 。

一、CSV数据

CSV 文件(简称为 CSV)是指将数据列用逗号分隔的文件。文件的扩展名是 .csv。

另一种数据类型,叫作制表符分隔值(tab-separated values,TSV)数据,有时也与 CSV归为一类。TSV 与 CSV 唯一的不同之处在于,数据列之间的分隔符是制表符(tab),而不是逗号。文件的扩展名通常是 .tsv,但有时也用 .csv 作为扩展名。从本质上来看,.tsv 文件与 .csv 文件在Python 中的作用是相同的。

我们采用的数据源是从世界卫生组织(www.who.int/zh/home)中下载…

打开世卫组织官网后,点击“健康主题”,“数据和统计” 就能找到很多数据。

这里下载了关于婴幼儿护理的统计数据,并重命名为 data.csv

csv 文件可以直接用 Excel 打开直观的看到,我们用 Excel 打开如下图:

接下来就要用 Python 来简单的处理这些数据。

以列表的形式读取csv数据

编写一个读取 csv 文件的程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import csv

csvfile = open('./data.csv', 'r')
reader = csv.reader(csvfile)

for row in reader:
    print(row)
复制代码

import csv 将导入 Python 自带的 csv 模块。csvfile = open('./data.csv', 'r') 以只读的形式打开数据文件并存储到变量 csvfile 中。然后调用 csv 的 reader() 方法将输出保存在 reader 变量中,再用 for 循环将数据输出。

运行程序,控制台输出:

可以看到跟 Excel 打开的内容一致。

以字典的形式读取csv数据

改一下代码,以字典的形式读取 csv

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import csv

csvfile = open('./data.csv', 'r')
reader = csv.DictReader(csvfile)

for row in reader:
    print(row)
复制代码

控制台输出:

二、JSON数据

同样在世卫组织官网下载数据源,重命名为 data.json。用格式化工具打开 json 文件如下:

编写程序对 json 进行解析

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import json

# 将 json 文件读取成字符串
json_data = open('./data.json').read()
# 对json数据解码
data = json.loads(json_data)
# data 的类型是 字典dict
print(type(data))
# 直接打印 data
print(data)
# 遍历字典
for k, v in data.items():
    print(k + ':' + str(v))
复制代码

控制台输出:

Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数:

  • json.dumps(): 对数据进行编码。
  • json.loads(): 对数据进行解码。

在json的编解码过程中,python 的原始类型与json类型会相互转换,具体的转化对照如下:

Python 编码为 JSON 类型转换对应表:

Python

JSON

dict

object

list, tuple

array

str

string

int, float, int- & float-derived Enums

number

True

true

False

false

None

null

JSON 解码为 Python 类型转换对应表:

JSON

Python

object

dict

array

list

string

str

number (int)

int

number (real)

float

true

True

false

False

null

None

三、XML 数据

XML 格式的数据既便于机器读取,也便于人工读取。但是对于本章的数据集来说,预览并理解 CSV 文件和 JSON 文件要比 XML 文件容易得多。

xml 格式说明:

  • Tag: 使用<和>包围的部分;
  • Element:被Tag包围的部分,如 2003,可以认为是一个节点,它可以有子节点;
  • Attribute:在Tag中可能存在的 name/value 对,如示例中的 title="Enemy Behind",一般表示属性。

世卫组织的数据不好理解,咱们用个简单的能看得懂的电影数据来做演示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<collection shelf="New Arrivals">
    <movie title="Enemy Behind">
        <type>War, Thriller</type>
        <format>DVD</format>
        <year>2003</year>
        <rating>PG</rating>
        <stars>10</stars>
        <description>Talk about a US-Japan war</description>
    </movie>
    <movie title="Transformers">
        <type>Anime, Science Fiction</type>
        <format>DVD</format>
        <year>1989</year>
        <rating>R</rating>
        <stars>8</stars>
        <description>A schientific fiction</description>
    </movie>
    <movie title="Trigun">
        <type>Anime, Action</type>
        <format>DVD</format>
        <episodes>4</episodes>
        <rating>PG</rating>
        <stars>10</stars>
        <description>Vash the Stampede!</description>
    </movie>
    <movie title="Ishtar">
        <type>Comedy</type>
        <format>VHS</format>
        <rating>PG</rating>
        <stars>2</stars>
        <description>Viewable boredom</description>
    </movie>
</collection>
复制代码

这个数据相对来说比较简单,只有三层。但原理掌握了,几层数据都能搞定。

下面编写代码对上面的 xml 进行解析,解析之后再分别格式化成字典和 json 格式的数据输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from xml.etree import ElementTree as ET
import json

tree = ET.parse('./resource/movie.xml')
root = tree.getroot()

all_data = []

for movie in root:
    # 存储电影数据的字典
    movie_data = {}
    # 存储属性的字典
    attr_data = {}

    # 取出 type 标签的值
    movie_type = movie.find('type')
    attr_data['type'] = movie_type.text

    # 取出 format 标签的值
    movie_format = movie.find('format')
    attr_data['format'] = movie_format.text

    # 取出 year 标签的值
    movie_year = movie.find('year')
    if movie_year:
        attr_data['year'] = movie_year.text

    # 取出 rating 标签的值
    movie_rating = movie.find('rating')
    attr_data['rating'] = movie_rating.text

    # 取出 stars 标签的值
    movie_stars = movie.find('stars')
    attr_data['stars'] = movie_stars.text

    # 取出 description 标签的值
    movie_description = movie.find('description')
    attr_data['description'] = movie_description.text

    # 获取电影名字,以电影名为字典的键,属性信息为字典的值
    movie_title = movie.attrib.get('title')
    movie_data[movie_title] = attr_data
    # 存入列表中
    all_data.append(movie_data)

print(all_data)
# all_data 此时是一个列表对象,用 json.dumps() 将python对象转换为 json 字符串
json_str = json.dumps(all_data)
print(json_str)
复制代码

注释写的比较详细,下面介绍下 ElementTree 提供的方法。

3.1 解析的三种方法

ElementTree 解析 xml 有三种方法:

  1. 调用parse()方法,返回解析树 tree = ET.parse('./resource/movie.xml') root = tree.getroot() 复制代码
  2. 调用from_string(),返回解析树的根元素 data = open('./resource/movie.xml').read() root = ET.fromstring(data) 复制代码
  3. 调用 ElementTree 类的 ElementTree(self, element=None, file=None) 方法 tree = ET.ElementTree(file="./resource/movie.xml") root = tree.getroot() 复制代码

3.2 Element 对象

class xml.etree.ElementTree.Element(tag, attrib={}, **extra)

Element 对象的属性

  • tag: 标签
  • text: 去除标签,获得标签中的内容。
  • attrib: 获取标签中的属性和属性值。
  • tail: 这个属性可以用来保存与元素相关联的附加数据。它的值通常是字符串,但可能是特定于应用程序的对象。

Element 对象的方法

  1. clear():清除所有子元素和所有属性,并将文本和尾部属性设置为None。
  2. get(attribute_name, default=None):通过指定属性名获取属性值。
  3. items():以键值对的形式返回元素属性。
  4. keys():以列表的方式返回元素名。
  5. set(attribute_name,attribute_value):在某标签中设置属性和属性值。
  6. append(subelement):将元素子元素添加到元素的子元素内部列表的末尾。
  7. extend(subelements):追加子元素。
  8. find(match, namespaces=None):找到第一个匹配的子元素,match可以是标签名或者path。返回Elememt实例或None。
  9. findall(match, namespaces=None):找到所有匹配的子元素,返回的是一个元素列表。
  10. findtext(match, default=None, namespaces=None):找到匹配第一个子元素的文本。返回的是匹配元素中的文本内容。
  11. getchildren():Python3.2后使用 list(elem) 或 iteration.
  12. getiterator(tag=None):Python3.2后使用 Element.iter()
  13. iter(tag=None):以当前元素为根创建树迭代器。迭代器遍历这个元素和它下面的所有元素(深度优先级)。如果标签不是None或’*’,那么只有标签等于标签的元素才会从迭代器返回。如果在迭代过程中修改树结构,则结果是未定义的。
  14. iterfind(match, namespaces=None): 匹配满足条件的子元素,返回元素。

3.3 ElementTree 对象

class xml.etree.ElementTree.ElementTree(element=None, file=None)

ElementTree是一个包装器类,这个类表示一个完整的元素层次结构,并为标准XML的序列化添加了一些额外的支持。

  1. setroot(element):替换根元素,原来的根元素中的内容会消失。
  2. find(match, namespaces=None):从根元素开始匹配和 Element.find()作用一样。
  3. findall(match, namespaces=None):从根元素开始匹配和 Element.findall()作用一样。
  4. findtext(match, default=None, namespaces=None):从根元素开始匹配和 Element.findtext()作用一样。
  5. getiterator(tag=None):Python3.2后使用 ElementTree.iter() 代替。
  6. iter(tag=None):迭代所有元素
  7. iterfind(match, namespaces=None):从根元素开始匹配和 Element.iterfind()作用一样。
  8. parse(source, parser=None):解析xml文本,返回根元素。
  9. write(file, encoding=”us-ascii”, xml_declaration=None, default_namespace=None, method=”xml”, *, short_empty_elements=True):写出XML文本。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
如何用u盘安装一个纯净的win10系统
最近用了一段时间win10之后,有点对windows路转粉的意思,把所有的电脑都装成了win10系统,这里记录一下用U盘安装win10的过程和一些中间用到的工具,以及遇到的一些问题。
efonfighting
2019/11/08
2K0
如何用u盘安装一个纯净的win10系统
用U盘作电脑系统启动盘
  在最开始有电脑的时候,安装系统都是到市场上买安装光盘来给电脑装系统。后来都学乖了,原来可以直接用U盘作启动盘,同时作为系统的安装盘,这样的好处不言而喻啊。
用户1170933
2022/05/10
1.8K0
用U盘作电脑系统启动盘
(图文)U盘安装原版WIN10系统
首先 我们先去下载好WIN10 64的原版系统 那么去哪里下呢 不用看 首选肯定是MSDN的了 直接百度MSDN 或者 I TELL YOU 都可以进入都官网 【这里直接提供一个镜像下载】:
Erwin
2019/12/31
1.2K0
最新Win10专业版系统下载|Win10 22H2纯净版安装教程|UEFI引导+U盘分区优化+安全加固(含官方镜像文件)
Windows 10 是微软推出的一款具有重要影响力的操作系统。它在易用性和安全性上有显著提升,对云服务、智能移动设备等新技术进行融合,还优化支持了固态硬盘等硬件。其特点丰富,有 Cortana 个人助理、Edge 浏览器、多桌面和任务视图等。开始菜单回归经典且具高度可定制性,搜索栏功能强大。从 Windows Store 下载的应用可窗口化运行。
万里顾一诚
2025/06/09
5.4K0
最新Win10专业版系统下载|Win10 22H2纯净版安装教程|UEFI引导+U盘分区优化+安全加固(含官方镜像文件)
制作ubuntu安装u盘
Ubuntu官方中文译名为友帮拓,是一款开源免费的linux操作系统。与其他的linux操作系统不同之处在于Ubuntu的软件包清单只包含那些高质量的重要应用程序,因此深受广大linux用户的喜爱,那么ubuntu怎样安装呢?下面就跟小编一起来看看怎么用u盘安装ubuntu系统(因为现在很多的台式电脑已经没有光驱了)。 工具/原料 U盘,ubuntu操作系统的iso文件,UltraISO软件。 安装步骤 首先我们要来下载Ubuntu操作系统,操作系统的下载可以到Ubuntu的中文官方网站进行下
庞小明
2018/03/07
5.3K0
制作ubuntu安装u盘
系统启动u盘制作方法_U盘启动
叙:之前自己的系统是家庭版的,在自己升级为专业版的时候出了问题,很生气想重装系统,但是苦于没有系统U盘,想自己制作一个系统U盘,但当时出差手里又没有带空白U盘,很尴尬~,最后自己自己在网上查了很久,试了很多方法终于把系统的小瑕疵解决了(家庭版升专业版详细操作:https://blog.csdn.net/qq_40762011/article/details/82782272 pass:文章名字可能不一样,但是同样可以将家庭版升级成专业版的),出差回来后着手做一个系统U盘以备后用;
全栈程序员站长
2022/09/19
5.4K0
系统启动u盘制作方法_U盘启动
[735]利用UItraISO软碟通制作U盘启动盘安装Ubuntu16.04系统
第2,3可以不勾选:第2选项是默认.ISO文件都用软碟通打开,不经常使用软碟通没必要关联;第3选项会生产一个驱动器(空盘),类似于百度云盘的,不经常使用软碟通不建议勾选。
周小董
2020/01/13
3.7K0
[735]利用UItraISO软碟通制作U盘启动盘安装Ubuntu16.04系统
使用 Rufus 创建 win10 启动盘(系统镜像大于4G)
今天突然被问到关于安装 win10 系统的事儿,我之前有做过 win10 启动盘不过由于时间太久已经给忘了233 借此机会在这里也做个记录。
2Broear
2024/03/12
2K0
使用 Rufus 创建 win10 启动盘(系统镜像大于4G)
第三章:UltraiSO制作启动u盘+制作winPE镜像+硬盘安装系统
天蝎座的程序媛
2023/10/17
3.6K0
第三章:UltraiSO制作启动u盘+制作winPE镜像+硬盘安装系统
「  【软碟通】如何刻录系统(ISO)到U盘-小白刻录U盘  」
写在前面,软碟通是一款功能强大而又方便实用的光盘映像文件制作/编辑/转换工具,它可以直接编辑ISO文件和从ISO中提取文件和目录,也可以从CD-ROM制作光盘映像或者将硬盘上的文件制作成ISO文件。同时,你也可以处理ISO文件的启动信息,从而制作可引导光盘。使用UltraISO,你 可以随心所欲地制作/编辑/转换光盘映像文件,配合光盘刻录软件烧录出自己所需要的光碟
青益
2023/01/03
5.8K0
「  【软碟通】如何刻录系统(ISO)到U盘-小白刻录U盘  」
号主无聊时间做了个Win10家庭中文版ISO镜像,支持写入U盘做启动安装盘等!
相信大家都知道,国内销售的品牌机预装的操作系统都是Windows10家庭中文版(购买前没有要求具体系统的话),并且会在主板上预置了序列号,该序列号只有Windows10家庭中文版可以使用,此外还有隐藏的系统恢复分区(如果使用U盘安装了系统的话,一般就会没了),Windows10 Home,Windows家庭单语言版等均不能正常激活。
FreeRonin
2020/07/01
1.7K0
怎么用U盘重装系统
在使用电脑的过程中,难免会遇到系统故障、运行缓慢等问题。当这些问题严重影响使用电脑的体验时,重装系统往往是一个有效的解决办法。用U盘重装系统是一种简单快捷的方法,本文将详细介绍如何使用U盘来重装系统,帮助大家轻松完成这一过程。
用户7704932
2024/07/31
3420
怎么用U盘重装系统
怎么让联想计算机升级,联想电脑怎么升级win11?联想电脑升级win11的几种方法…
最近刚发布的windows11的消息,但是很多朋友使用联想电脑的朋友不知道怎么升级win11。戴尔电脑升级win11的方法有很多,可以通过win10系统加入WINDOWS 预览体验计划,这样就可以将win10升级到win11系统了,也可以采用自己下载win11镜像用u盘的方式升级到win11系统,下面小编就教大家几种将联想电脑升级win11的方法详细步骤。
全栈程序员站长
2022/08/31
2.1K0
U盘PE装原版Win10系统教程
本教程主要讲述如何用U盘PE启动安装原版Win10系统(即MSDN下载的ISO),当原系统损坏、崩溃或Win10升级异常导致系统启动不了时,都可以使用U盘启动来修复/重装。U盘PE重装非常灵活,可以这么说学会灵活使用PE维护系统等于多一个撩小姐姐的技能(不管你信不信,反正我是懂了),下面10号搬运工以微PE为示范安装最新Win10原版。
小城故事
2023/03/10
4K0
U盘PE装原版Win10系统教程
怎么重装系统?怎样用U盘安装win10系统?
说到重装系统,相信这是让很多女生特别头痛的事情,但是电脑使用时间久了之后就会容易卡,或者是软件系统出现某些问题,如果不进行重装系统的话,那么就没办法正常使用了,所以就必须要重装系统。那么怎么重装系统?怎样用U盘安装win10系统?
用户8715145
2021/07/09
2.1K0
2018年8月30日winPE系统和启动盘格式的区别和win安装系统启动方式的区别
*********************************** winPE系统: Windows Preinstallation Environment(Windows PE),Windows预安装环境, 是带有有限服务的最小Win32子系统,基于以保护模式运行的Windows XP Professional 及以上内核。它包括运行Windows安装程序及脚本、连接网络共享、自动化基本过程 以及执行硬件验证所需的最小功能。 用途:操作系统损坏无法进入的情况下启动硬盘上的Windows PE可以方便地修复或者 取出电脑中的数据。
武军超
2018/09/27
1.5K0
U盘安装Windows10系统
[1] UltraISO: https://cn.ultraiso.net/xiazai.html [2] Windows10-ISO镜像文件: https://msdn.itellyou.cn/
编程随想曲
2022/04/21
1.6K0
如何利用 U 盘制作系统启动盘?
在我们日常使用电脑的过程中,难免会遇到电脑卡顿的情况,大多时候我们可以通过重装系统的方式来让我们的电脑重焕新生。但是这时候就遇到个难题呀,不会装系统咋办???去电脑城或者维修店花钱装?
村雨遥
2022/06/15
3.4K0
如何利用 U 盘制作系统启动盘?
微PE制作U盘启动盘,并安装Win10
微PE 是一款很好用的 WinPE (Windows预先安装环境(英语:Microsoft Windows Preinstallation Environment),简称Windows PE或WinPE)工具箱,可以用来制作一个随插随用的U盘启动盘,并且不影响U盘的日常使用,在 Windows 系统电脑的系统出问题时会是救命般的存在。下面就来介绍一下如何制作 PE启动盘 ,并使用它来安装 Win10 操作系统。
宋天伦
2020/09/29
31.6K0
微PE制作U盘启动盘,并安装Win10
linux镜像文件没有gho,【iso文件中没有gho文件】iso变gho_iso文件里没有gho-系统城…
gho文件是ghost系统的克隆镜像,存储着系统分区的所有文件信息,可用于安装系统,有些U盘安装方法需要把ISO镜像中的gho文件拷贝到U盘,那么gho文件在哪里呢?ISO镜像中的gho文件是哪个呢?下面系统城小编就跟大家分析一下。
全栈程序员站长
2022/09/14
8.8K0
推荐阅读
相关推荐
如何用u盘安装一个纯净的win10系统
更多 >
目录
  • 前言
  • 一、CSV数据
    • 以列表的形式读取csv数据
    • 以字典的形式读取csv数据
  • 二、JSON数据
    • Python 编码为 JSON 类型转换对应表:
    • JSON 解码为 Python 类型转换对应表:
  • 三、XML 数据
    • 3.1 解析的三种方法
    • 3.2 Element 对象
      • Element 对象的属性
      • Element 对象的方法
    • 3.3 ElementTree 对象
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档