Я ищу код буфера для обработки огромных записей в файле tuple / csv / sqlite db records / numpy.darray, буфер может быть похож на команду linux «more».
Запрос пришел от обработки огромных записей данных (возможно, 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 или команда "more file", может сэкономить память при обработке.
Поскольку эти необработанные данные могут быть представлены в другом формате - 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