如果您的“数字”是足够简单的数字(每个最大为4个字节的有符号或无符号整数,或者每个为4或8个字节的浮点数),我建议使用标准库数组模块作为保留数百万个的最佳方法在内存(“虚拟阵列”的“尖端”)中存储一个二进制文件(针对二进制R / W打开),以支持磁盘上其余结构。
array.array具有非常快
fromfile和
tofile方式,方便数据的来回移动。
即,基本上,假设无符号长数,例如:
import os# no more than 100 million items in memory at a timeMAXINMEM = int(1e8)class bigarray(object): def __init__(self): self.f = open('afile.dat', 'w+') self.a = array.array('L') def append(self, n): self.a.append(n) if len(self.a) > MAXINMEM: self.a.tofile(self.f) del self.a[:] def pop(self): if not len(self.a): try: self.f.seek(-self.a.itemsize * MAXINMEM, os.SEEK_END) except IOError: return self.a.pop() # ensure normal IndexError &c try: self.a.fromfile(self.f, MAXINMEM) except EOFError: pass self.f.seek(-self.a.itemsize * MAXINMEM, os.SEEK_END) self.f.truncate() return self.a.pop()当然你也可以添加其他的方法在必要时(总长度如跟踪,添加
extend,等等),但如果
pop和
append确实是你所需要的这应有助于。



