- 本书赞誉
- 前言
- 目标读者
- 不适合阅读本书的读者
- 本书结构
- 什么是数据处理
- 遇到困难怎么办
- 排版约定
- 使用代码示例
- 致谢
- 第 1 章 Python 简介
- 第 2 章 Python 基础
- 第 3 章 供机器读取的数据
- 第 4 章 处理 Excel 文件
- 第 5 章 处理 PDF 文件 以及用 Python 解决问题
- 第 6 章 数据获取与存储
- 第 7 章 数据清洗:研究、匹配与格式化
- 第 8 章 数据清洗:标准化和脚本化
- 第 9 章 数据探索和分析
- 第 10 章 展示数据
- 第 11 章 网页抓取:获取并存储网络数据
- 第 12 章 高级网页抓取:屏幕抓取器与爬虫
- 第 13 章 应用编程接口
- 第 14 章 自动化和规模化
- 第 15 章 结论
- 附录 A 编程语言对比
- 附录 B 初学者的 Python 学习资源
- 附录 C 学习命令行
- 附录 D 高级 Python 设置
- 附录 E Python 陷阱
- 附录 F IPython 指南
- 附录 G 使用亚马逊网络服务
- 关于作者
- 关于封面
3.2 JSON 数据
JSON 数据是数据传输最常用的格式之一。人们喜欢这一格式,是因为它结构清晰、易于阅读且方便解析。网站在向页面的 JavaScript 传输数据时,JSON 也是最常用的数据格式之一。许多网站都提供了支持 JSON 的 API,我们会在第 13 章讲到。本节会继续使用全球预期寿命的数据。WHO 并没有提供这一数据的 JSON 格式,但我们为本书创建了 JSON 版本的数据,你可以在代码仓库(https://github.com/jackiekazil/data-wrangling)中找到。
如果文件的扩展名是 .json,那里面包含的可能是 JSON 数据。如果文件扩展名是 .js,那可能是 JavaScript 文件,但在少数情况下也可能是命名不规范的 JSON 文件。
在代码编辑器里打开这个 JSON 文件,你会发现每一条数据记录都很像一个 Python 字典。每一行都有键和值,用 : 分隔,数据条目之间用 , 分隔。首尾还有花括号包围 {}。这是 JSON 文件的一条数据记录:
[ { "Indicator":"Life expectancy at birth (years)", "PUBLISH STATES":"Published", "Year":1990, "WHO region":"Europe", "World Bank income group":"High-income", "Country":"Andorra", "Sex":"Both sexes", "Display Value":77, "Numeric":77.00000, "Low":"", "High":"", "Comments":"" }, ]
JSON 文件有时看起来和字典完全相同,这与输出格式有关。在上面的示例中,每一个数据条目就是一个 Python 字典(首尾由 { 和 } 包围),这些字典又包含在一个列表中,列表首尾由 [ 和 ] 包围。
如何导入JSON数据
在 Python 中导入 JSON 文件比导入 CSV 文件还要简单。下面的代码将对一个 JSON 数据文件执行打开、加载、导入与输出的操作:
import json ➊ json_data = open('data-text.json').read() ➋ data = json.loads(json_data) ➌ for item in data: ➍ print item
❶ 导入 Python 的 json 库(https://docs.python.org/2/library/json.html),我们用它来处理 JSON 文件。
❷ 利用 Python 内置的 open 函数打开 JSON 文件。文件名叫作 data-text.json(这是 open 函数的第一个参数)。本行代码还调用了已打开文件的 read 方法,用来读取该文件,并将读取的内容保存在变量 json_data 中。
❸ 利用 json.loads() 将 JSON 数据载入 Python,并将输出保存在变量 data 中。
❹ 利用 for 循环遍历所有数据,并打印出每一项,这也是本例代码的输出。
在命令行中运行 python import_json_data.py,输出是一个字典,里面包含 JSON 文件中每一条数据记录。这个输出应该和 CSV 的最终输出基本相同。一定要记得将数据文件复制到脚本所在的文件夹,或者将脚本中的文件路径修改为文件实际所在的位置。
在 CSV 一节的最后,我们学习了如何保存文件并在命令行中运行。在本例中,我们从一个空白文件开始,逐步完成这项任务。
首先来快速看一下总体步骤。
(1) 在代码编辑器中创建一个新文件。
(2) 将文件保存为 import_json_data.py,与你的代码位于同一个文件夹下。
(3) 将数据移动(或保存)到代码所在的文件夹。(一定要重命名数据文件,使其与代码中的文件名相同。本书用的文件名是 data-text.json。)
(4) 回到代码编辑器,import_json_data.py 文件应该还处于打开状态。
我们来通读代码,并将其与导入 CSV 的代码文件作对比。首先,导入 Python 内置的 json 库:
import json
然后用学过的 open 函数打开 data-text.json 文件,并调用已打开文件的 read 方法:
json_data = open('data-text.json').read()
在 CSV 文件的例子中,我们并没有调用 read。二者的区别在哪里?在 CSV 的例子中,我们以只读方式打开文件;但在 JSON 的例子中,我们读取文件的内容,并将其保存在变量 json_data 中。在 CSV 的例子中,open 函数返回的是一个文件对象;但在 JSON 的例子中,我们首先打开文件,然后读取文件,所以得到的是一个 str(字符串)。二者的不同是基于下列事实:Python 的 json 库和 csv 库处理输入数据的方式不同。如果你试着将一个字符串传递给 CSV reader,Python 会报错;如果你把文件对象传递给 JSON 的 loads 函数, Python 也会报错。
好消息是,在 Python 中将字符串写入文件非常简单(比如说,你只有字符串,但想使用 CSV reader 来读取),将文件读取成字符串也非常简单。对 Python 来说,一个关闭的文件只是一个文件名字符串,等待被打开并读取。从文件中获取数据、将数据变成字符串并将字符串传递给函数,只需要几行 Python 代码即可完成。
进入保存 JSON 文件的文件夹,你可以在 Python 解释器中输入下面的代码,看一下前面两个例子中输出对象的类型:
filename = 'data-text.json' type(open(filename, 'rb')) # 与csv的代码类似 type(open(filename).read()) # 与json的代码类似
Python json 库的 loads 函数接收字符串作为参数,不接收文件作为参数。Python csv 库的 reader 函数接收打开的文件作为参数。在脚本的下一行代码中,我们将使用 loads 函数,将 JSON 字符串载入 Python。这一函数的输出被赋值给名为 data 的变量:
data = json.loads(json_data)
想要预览数据,我们对每一项进行遍历并将其打印出来。这段代码并不是必需的,但可以帮我们预览数据,检查数据的格式是否正确:
for item in data: print item
写完上述代码后,保存文件并运行。如你所见,在 Python 中打开 JSON 文件并将其转换成由字典组成的列表是非常容易的。下一节将探索更多自定义文件的处理方法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论