gpt4 book ai didi

python - 如何从 CSV 模块使用 Python 迭代器

转载 作者:太空宇宙 更新时间:2023-11-04 03:30:13 24 4
gpt4 key购买 nike

我有一个大型 (145 MB) CSV 文件,我想在 Python 中使用它。我是 Python 的新手,我正在努力思考 csv.reader() 以迭代器形式提供的数据。我一直在搜索和搜索,发现了大量关于迭代器是什么以及它们如何工作的信息,但关于如何在处理数据时实际使用它们的信息却很少。

我理解 next() 方法和整个停止迭代的事情,但这似乎是一种存储和检索数据的极其尴尬的方式。没有在 for 循环中遍历迭代器中的每一行并将其附加到列表中(这看起来非常麻烦),我真的不知道如何从迭代器中获取我需要的数据,尤其是考虑到我的数据已排序按列,而不是行。使用 csv.reader() 函数的预期方式是什么,是否有更好的方式来读取我的 csv 文件的内容?

每次我需要一个特定的数据集时,我是否需要迭代并重建迭代器数万次以获得我需要的完整数据列?我想我还没有尝试过,但这似乎不对……我一定是遗漏了什么。

最佳答案

迭代器只是一种迭代列表而不将其保存在内存中的方法。从技术上讲,一个文件可能比您的可用内存大,甚至可以交换 - 这将使迭代变得令人头疼。

迭代器只 promise 它知道如何获取下一个值。这种抽象允许它忘记它曾经存储的所有内容,并且还没有它要存储的所有内容。所以它的内存占用可以和单个列表项一样小。迭代非常轻松的巨大文件时。

也就是说,如果您想要不同的数据集,您可能希望首先在单次迭代中创建数据集,然后再使用它们。这可以帮助您过滤掉不打算使用的数据。

您也可以在迭代过程中进行处理。

您始终可以选择将整个文件作为列表保存在内存中,但这通常不是您想要的。

下面是一些使用迭代器进行处理的粗略示例:

rows = []
# ... create an iterator
for row in iterator:
process(row)
# ... use rows

您还可以使用迭代器来过滤您感兴趣的行:

# define an is_needed(row) predicate for a row
needed_rows = filter(is_needed, iterator)

下面是一个将值存储在内存中的例子:

# ... create iterator
rows = list(iterator)

# ... use rows - contains all values

关于python - 如何从 CSV 模块使用 Python 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31350509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com