在我最近的一个项目中,我需要执行这个简单的任务,但我不确定什么是最有效的方法。
我有几个大的文本文件(>5 5GB),我需要不断地从这些文件中提取随机行。要求是:我不能将文件加载到内存中,我需要非常有效地执行这一操作( >>1000每秒行),并且最好是我需要做尽可能少的预处理。
这些文件由许多短行(20 mil行)组成。"raw“文件有不同的行长度,但通过一个简短的预处理,我可以使所有行的长度相同(尽管,完美的解决方案不需要预处理)。
我已经尝试了here中提到的默认python解决方案,但它们太慢了(并且linecache解决方案将文件加载到内存中,因此在这里不可用)
我想到的下一个解决方案是创建某种索引。我发现了this solution,但它太过时了,所以它需要一些工作才能开始工作,即使这样,我也不确定在处理索引文件期间产生的开销是否会减慢上述解决方案的处理速度。
另一种解决方案是将文件转换为二进制文件,然后以这种方式即时访问行。对于这个解决方案,我找不到任何支持二进制文本工作的python包,我觉得以这种方式创建一个健壮的解析器可能需要很长时间,并且可能会因为小的计算错误/错误而产生许多难以诊断的错误。
我考虑的最后一个解决方案是使用某种类型的数据库(在我的例子中是sqlite),这将需要将行传输到数据库中并以这种方式加载它们。
注意:我每次也会加载数千条(随机)行,因此对线组更有效的解决方案将具有优势。
提前谢谢你,
艺术。
发布于 2018-11-26 23:00:59
正如评论中所说,我相信使用hdf5将是一个很好的选择。This answer显示了如何读取此类文件
https://stackoverflow.com/questions/53483493
复制相似问题