我正在寻找用于处理元组/csv 文件/sqlite db 记录/numpy.darray 中的大量记录的缓冲区代码,该缓冲区可能就像 linux 命令“更多”。
请求来自处理大量数据记录(可能是 100000000 行),记录可能如下所示:
0.12313 0.231312 0.23123 0.152432
0.22569 0.311312 0.54549 0.224654
0.33326 0.654685 0.67968 0.168749
...
0.42315 0.574575 0.68646 0.689596
我想在 numpy.darray 中处理它们。例如,找到特殊数据对其进行处理并将其存储回来,或者处理 2 列。但是它太大了,如果 numpy 直接读取文件,它会给我一个内存错误。
然后,我认为像mem cache page或linux“更多文件”命令这样的适配器可以在处理时节省内存。
因为这些原始数据可能呈现为不同的格式 - csv / sqlite_db / hdf5 / xml。我希望这个适配器更加规范化,那么,使用“[]”作为“行”可能是一种更常见的方式,因为我认为每个记录都可以表示为一个[]。
所以我想要的适配器可能看起来像这样:
fd = "a opend big file" # or a tuple of objects, whatever, it is an iterable object can access all the raw rows
page = pager(fd)
page.page_buffer_size = 100 # buffer 100 line or 100 object in tuple
page.seek_to(0) # move to start
page.seek_to(120) # move to line #120
page.seek_to(-10) # seek back to #120
page.next_page()
page.prev_page()
page1 = page.copy()
page.remove(0)
page.sync()
有人可以告诉我一些提示以防止重新发明轮子吗?
顺便说一句,ATpy,http ://atpy.sourceforge.net/是一个模块,可以将 numpy.array 与不同格式的原始数据源同步,但是,它也可以将所有数据读取到内存中。
到目前为止,pytable 不适合我,因为它不支持 SQL,并且 HDF5 文件可能不像 sqlite db 那样受欢迎(如果这是错误的,请原谅我)。
My plan is write this tools in this way:
1. helper.py <-- define all the house-keeping works for different file format
|- load_file()
|- seek_backword()
|- seek_forward()
| ...
2. adapter.py <-- define all the interface and import the helper to interact
with raw data and get a way to interact with numpy.darray in somehow.
|- load()
|- seek_to()
|- next_page()
|- prev_page()
|- sync()
|- self.page_buffer_size
|- self.abs_index_in_raw_for_this_page = []
|- self.index_for_this_page = []
|- self.buffered_rows = []
谢谢,
Rgs,
KC