python - 用于存储巨大(>5GB)排序文件的数据结构

标签 python algorithm

假设我们有一个 csv 文件(>5GB),其中包含员工姓名和年龄列。该文件按年龄排序。 现在,我希望用户使用 Age 搜索该文件。有人可以指导我哪种数据结构最适合此要求吗?

示例:

myfile.csv

25 ABC    
25 MNP
14 XYZ
14 PQR

输入:

14

输出:

XYZ
PQR

最佳答案

假设文件太大而无法放入 RAM,您可以创建一个索引,这样您就可以最大限度地减少磁盘读取次数(比 RAM 读取慢得多)。

一些常用的磁盘索引是 B+ trees (其中顶层存储在 RAM 中)和 hash tables .

或者,您可以将其存储为 SQL表并让图书馆自己照顾自己。

另一种选择,由于范围相当小(我无法想象年龄大于 200),您可以使用 200 个(或可能更少)不同的文件:names_1,names_2,...,names_200哪里names_i包含年龄为 i 的所有姓名的列表。
(此外,由于许多条目中都省略了年龄,因此您实际上可以将其作为 dictionary:age->list<names> 放入 RAM 中)

如果数据适合 RAM - 您可以使用排序数组(如果数据变化不经常/不期望)并使用二分搜索。
如果需要更改数据,可以使用其他一些结构,例如 RAM 上的哈希表,或 self balancing BST

关于python - 用于存储巨大(>5GB)排序文件的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12875188/

相关文章:

python - PyOpenGl Pygame 窗口在运行时卡住

android - Kivy 启动器无法与 numpy 一起使用

string - 解析字符串中的文本

java - 使用 floodfill 计算矩阵中的相邻零点

algorithm - 特定数组的哈希

Python,停止一个线程

python - 如何阻止 Keras 显示 "using XXX backend"?

python - tf.argmax() 用于多个索引 Tensorflow

algorithm - 选择尽可能多的行,以保证每列的项目密度

algorithm - 优先级队列和双端队列