详解 Python处理 CSV 文件和 JSON 数据

CSV 表示“Comma-Separated Values(逗号分隔的值)”, CSV文件是简化的电子表格,保存为纯文本文件。 Python 的 csv 模块让解析 CSV 文件变得容易。
JSON(发音为“JAY-sawn”或“Jason”,但如何发音并不重要。因为无论如何发音,都会有人说你发音错误)是一种格式,它以 JavaScript 源代码的形式,将信息保存在纯文本文件中。
JSON 是 JavaScript Object Notation 的缩写不需要知道 JavaScript 编程语言,就可以使用 JSON 文件,但了解 JSON 格式是有用的,因为它用于许多 Web 应用程序中。

14.1  csv 模块

CSV 文件中的每行代表电子表格中的一行,逗号分割了该行中的单元格。例如,
来自 http://nostarch.com/automatestuff/的电子表格 example.xlsx,在一个 CSV 文件中,看起来像这样:

详解 Python处理 CSV 文件和 JSON 数据_第1张图片

CSV 文件是简单的,缺少 Excel 电子表格的许多功能。例如, CSV 文件中:
• 值没有类型,所有东西都是字符串;
• 没有字体大小或颜色的设置;
• 没有多个工作表;
• 不能指定单元格的宽度和高度;
• 不能合并单元格;
• 不能嵌入图像或图表。
 CSV 的文件的优势是简单。 CSV 文件被许多种类的程序广泛地支持,可以在文本编辑器中查看(包括 IDLE 的文件编辑器),它是表示电子表格数据的直接方式。CSV 格式和它声称的完全一致:它就是一个文本文件,具有逗号分隔的值。

14.1.1 Reader 对象

要用 csv 模块从 CSV 文件中读取数据,需要创建一个 Reader 对象。 Reader 对象让你迭代遍历 CSV 文件中的每一行。
详解 Python处理 CSV 文件和 JSON 数据_第2张图片

csv 模块是 Python 自带的,所以不需要安装就可以导入它。

要用 csv 模块读取 CSV 文件,首先用 open()函数打开它,就像打开任何其他文本文件一样。但是,不用在 open()返回的 File 对象上调用 read()或 readlines()方法,而是将它传递给 csv.reader()函数。这将返回一个 Reader 对象,供你使用。请注意,不能直接将文件名字符串传递给 csv.reader()函数。

要访问 Reader 对象中的值,最直接的方法,就是将它转换成一个普通 Python 列表, 即将它传递给 list()。在这个 Reader 对象上应用 list()函数,将返回一个列表的列表。可以将它保存在变量 exampleData 中。在交互式环境中输入 exampleData,将显示列表的列表。
既然已经将 CSV 文件表示为列表的列表,就可以用表达式 exampleData[row][col]来访问特定行和列的值。

14.1.2 在 for 循环中,从 Reader 对象读取数据

对于大型的 CSV 文件,你需要在一个 for 循环中使用 Reader 对象。这样避免将整个文件一次性装入内存。

详解 Python处理 CSV 文件和 JSON 数据_第3张图片

在导入 csv 模块,并从 CSV 文件得到 Reader 对象之后,可以循环遍历 Reader 对象中的行。每一行是一个值的列表,每个值表示一个单元格。

print()函数将打印出当前行的编号以及该行的内容。要取得行号,就使用 Reader对象的 line_num 变量,它包含了当前行的编号。

14.1.3 Writer 对象

Writer 对象让你将数据写入 CSV 文件。要创建一个 Writer 对象,就使用csv.writer()函数。详解 Python处理 CSV 文件和 JSON 数据_第4张图片

首先,调用 open()并传入'w',以写模式打开一个文件。这将创建对象。然后将它传递给 csv.writer(),创建一个 Writer 对象。

Writer 对象的 writerow()方法接受一个列表参数。列表中的每个词,放在输出的CSV 文件中的一个单元格中。 writerow()函数的返回值,是写入文件中这一行的字符数(包括换行字符)。

14.1.4 delimiter 和 lineterminator 关键字参数

假定你希望用制表符代替逗号来分隔单元格,并希望有两倍行距。可以在交互式环境中输入下面这样的代码:
详解 Python处理 CSV 文件和 JSON 数据_第5张图片

这改变了文件中的分隔符和行终止字符。分隔符是一行中单元格之间出现的字符。默认情况下, CSV 文件的分隔符是逗号。行终止字符是出现在行末的字符。默认情况下,行终止字符是换行符。你可以利用 csv.writer()的 delimiter 和 lineterminator关键字参数,将这些字符改成不同的值。传入 delimeter='\t'和 lineterminator='\n\n',这将单元格之间的字符改变为制表符,将行之间的字符改变为两个换行符。然后我们调用 writerow()三次,得到 3 行。
 

14.2 JSON 和 API

JavaScript 对象表示法是一种流行的方式,将数据格式化,成为人可读的字符串。 JSON 是 JavaScript 程序编写数据结构的原生方式,通常类似于 Python 的 pprint()函数产生的结果。不需要了解 JavaScript,也能处理 JSON 格式的数据。

下面是 JSON 格式数据的一个例子:

了解 JSON 是很有用,因为很多网站都提供 JSON 格式的内容,作为程序与网站交互的方式。这就是所谓的提供“应用程序编程接口(API)”。访问 API 和通过URL 访问任何其他网页是一样的。不同的是, API 返回的数据是针对机器格式化的(例如用 JSON), API 不是人容易阅读的。

利用 API,可以编程完成下列任务:
• 从网站抓取原始数据(访问 API 通常比下载网页并用 Beautiful Soup 解析 HTML
更方便)。
• 自动从一个社交网络账户下载新的帖子,并发布到另一个账户。例如,可以把
tumblr 的帖子上传到 Facebook。
• 从 IMDb、 Rotten Tomatoes 和维基百科提取数据,放到计算机的一个文本文件
中,为你个人的电影收藏创建一个“电影百科全书”。
可以在 http://nostarch.com/automatestuff/的资源中看到 JSON API 的一些例子。

14.3 json 模块

Python 的 json 模块处理了 JSON 数据字符串和 Python 值之间转换的所有细节,得到了 json.loads()和 json.dumps()函数。 JSON 不能存储每一种 Python 值,它只能包含以下数据类型的值:字符串、整型、浮点型、布尔型、列表、字典和 NoneType。JSON 不能表示 Python 特有的对象,如 File 对象、 CSV Reader 或 Writer 对象、 Regex对象或 Selenium WebElement 对象。

14.3.1 用 loads()函数读取 JSON

要将包含 JSON 数据的字符串转换为 Python 的值,就将它传递给 json.loads()函数(这个名字的意思是“load string”,而不 是“loads”)。在交互式环境中输入以下代码:

详解 Python处理 CSV 文件和 JSON 数据_第6张图片

导入 json 模块后,就可以调用 loads(),向它传入一个 JSON 数据字符串。 请注意, JSON 字符串总是用双引号。它将该数据返回为一个 Python 字典。 Python 字典是没有顺序的,所以如果打印 jsonDataAsPythonValue,键-值对可能以不同的顺序出现。

14.3.2 用 dumps 函数写出 JSON

json.dumps()函数(它表示“dump string”,而不是 “dumps”)将一个 Python 值转换成 JSON 格式的数据字符串。在交互式环境中输入以下代码:

详解 Python处理 CSV 文件和 JSON 数据_第7张图片

该值只能是以下基本 Python 数据类型之一:字典、列表、整型、浮点型、字符串、布尔型或 None。

CSV 和 JSON 是常见的纯文本格式,用于保存数据。它们很容易被程序解析,同时仍然让人可读,所以它们经常被用作简单的电子表格或网络应用程序的数据。csv 和 json 模块大大简化了读取和写入 CSV 和 JSON 文件的过程。

如果你试着去检查JSON解码后的数据,你通常很难通过简单的打印来确定它的结构, 特别是当数据的嵌套结构层次很深或者包含大量的字段时。 为了解决这个问题,可以考虑使用pprint模块的 pprint() 函数来代替普通的 print() 函数。 它会按照key的字母顺序并以一种更加美观的方式输出。详解 Python处理 CSV 文件和 JSON 数据_第8张图片

你可能感兴趣的:(Python基础&进阶)