如何在 python 中处理大文件?

Posted

技术标签:

【中文标题】如何在 python 中处理大文件?【英文标题】:How to work with large files in python? 【发布时间】:2014-05-22 18:22:20 【问题描述】:

我很好奇

例如,我在硬盘驱动器上有数据集 ~20Gb(只是数字数组),我想对该数组进行排序以获得 k 最小值。 因此数据集无法加载到内存(RAM)中。

我认为算法应该是:通过n个块加载数据集,在块中找到k min,将k min存储在内存中并处理每个块,因此我们得到k * n个值,然后将它们排序得到k个最小值。

但问题是如何存储数据集(什么格式?),从磁盘加载它的最快方法是什么(我必须为特定硬件选择什么大小的块?)也许可以通过使用多个线程来完成?

【问题讨论】:

这些数字有哪些限制?是否有一些上限/下限?这将影响您可能使用的各种方法。 阅读neopythonic.blogspot.de/2008/10/… 了吗?您能否提供有关您的特定任务、数据集等的更多详细信息? 您应该在数据的惰性迭代器上使用heapq.nsmallest()。无需为每个块获取 k 个最小值——您可以在一次通过中即时获得结果。 对于更一般的问题,请使用PyTables。 @DonaghHatton 我使用 int32 数字。 【参考方案1】:

您需要external sort。如果将所有内容加载到内存中并对其进行排序,则将其命名为internal sort。在数据库中,它使用external sort来做排序任务。

也许以下资源会对您有所帮助。

Wiki, external sorting Wiki, internal sorting Github, external-sort A blog post about external-sort The author provides a github link about his work

【讨论】:

以上是关于如何在 python 中处理大文件?的主要内容,如果未能解决你的问题,请参考以下文章

python 如何读取大文件

如何在 pyspark 中读取大的 zip 文件

要合并的大文件。如何防止熊猫合并中的重复?

在 python 和 numpy 中处理大数据,没有足够的内存,如何将部分结果保存在磁盘上?

如何在 python 中操作一个巨大的 CSV 文件

如何使用批处理代码制作大字符串以在 python 中执行?