使用 CSV 数据的基本生成器管道
在这一步中,你将学习如何使用生成器创建一个基本的处理管道。不过,首先让我们了解一下什么是生成器。生成器是 Python 中一种特殊的迭代器(iterator)。与可能会一次性将所有数据加载到内存中的常规迭代器不同,生成器按需生成值。在处理大数据流时,这一特性非常有用,因为它可以节省内存。生成器无需将整个数据集存储在内存中,而是根据你的需求逐个生成值。
理解生成器
生成器本质上是一个返回迭代器的函数。当你对这个迭代器进行迭代时,它会生成一系列值。编写生成器函数的方式与常规函数类似,但有一个关键区别。生成器函数不使用 return
语句,而是使用 yield
语句。yield
语句具有独特的行为。它会暂停函数并保存其当前状态。当请求下一个值时,函数会从暂停的位置继续执行。这使得生成器能够逐步生成值,而无需每次都从头开始。
使用 follow()
函数
你之前创建的 follow()
函数的工作方式类似于 Unix 的 tail -f
命令。tail -f
命令会持续监控文件的新内容,follow()
函数也是如此。现在,让我们使用它来创建一个简单的处理管道。
步骤 1:打开一个新的终端窗口
首先,在 WebIDE 中打开一个新的终端窗口。你可以通过选择 Terminal → New Terminal
来实现。这个新终端将用于运行 Python 命令。
步骤 2:启动 Python 交互式 shell
新终端打开后,启动 Python 交互式 shell。你可以在终端中输入以下命令来启动:
python3
Python 交互式 shell 允许你逐行运行 Python 代码并立即查看结果。
步骤 3:导入 follow
函数并设置管道
现在,我们将导入 follow
函数并设置一个基本的管道来读取股票数据。在 Python 交互式 shell 中,输入以下代码:
>>> from follow import follow
>>> import csv
>>> lines = follow('stocklog.csv')
>>> rows = csv.reader(lines)
>>> for row in rows:
... print(row)
...
以下是每行代码的作用:
from follow import follow
:从 follow
模块中导入 follow
函数。
import csv
:导入 csv
模块,该模块用于在 Python 中读取和写入 CSV 文件。
lines = follow('stocklog.csv')
:调用 follow
函数并传入文件名 stocklog.csv
。follow
函数返回一个生成器,该生成器会在文件有新行添加时生成这些新行。
rows = csv.reader(lines)
:csv.reader()
函数接收 follow
函数生成的行,并将它们解析为 CSV 数据行。
for
循环遍历这些行并打印每一行。
步骤 4:检查输出
运行代码后,你应该会看到类似以下的输出(你的数据会有所不同):
['BA', '98.35', '6/11/2007', '09:41.07', '0.16', '98.25', '98.35', '98.31', '158148']
['AA', '39.63', '6/11/2007', '09:41.07', '-0.03', '39.67', '39.63', '39.31', '270224']
['XOM', '82.45', '6/11/2007', '09:41.07', '-0.23', '82.68', '82.64', '82.41', '748062']
['PG', '62.95', '6/11/2007', '09:41.08', '-0.12', '62.80', '62.97', '62.61', '454327']
...
这个输出表明你已经成功创建了一个数据管道。follow()
函数从文件中生成行,然后这些行被传递给 csv.reader()
函数,该函数将它们解析为数据行。
如果你已经看到足够的输出,可以通过按 Ctrl+C
停止执行。
原理剖析
让我们详细分析一下这个管道中发生了什么:
follow('stocklog.csv')
创建了一个生成器。这个生成器会跟踪 stocklog.csv
文件,并在文件有新行添加时生成这些新行。
csv.reader(lines)
接收 follow
函数生成的行,并将它们解析为 CSV 行数据。它了解 CSV 文件的结构,并将行拆分为单个值。
for
循环遍历这些行并打印每一行。这使你能够以可读的格式查看数据。
这是一个使用生成器进行数据处理管道的简单示例。在接下来的步骤中,我们将构建更复杂、更实用的管道。