Старый способ - использовать простую таблицу данных ключ / значение, например модуль gdbm. Python поставляется с поддержкой этого, но он не встроен в установку Python по умолчанию на моем компьютере.
В общем, используйте SQLite. Как писали другие, он входит в стандартную комплектацию Python и уже используется во многих встроенных системах.
Если записи фиксированной длины, вы можете использовать модуль bisect. Размер файла / размер записи дает количество записей в файле. Биссектный поиск выполнит поиск O (log (n)) в файле, и вам потребуется написать адаптер для проверки на равенство. Пока я его не проверял, вот эскиз:
import bisect
RECORD_SIZE = 50
class MatchFirst10Chars(object):
def __init__(self, word):
self.word = word
def __lt__(self, other):
return self.word < other[:10]
class FileLookup(object):
def __init__(self, f):
self.f = f
f.seek(0, 2)
self.size = f.tell() // RECORD_SIZE
def __len__(self):
return self.size
def __getitem__(self, i):
self.f.seek(i*RECORD_SIZE)
return self.f.read(RECORD_SIZE)
SKU = "123-56-89 "
f = open("data_file")
fl = FileLookup(f)
i = bisect.bisect(fl, MatchFirst10Chars(SKU))
Вы можете дополнительно распаковать файл и выполнить поиск по файлу в формате gzip, но это компромисс между пространством и временем, который вам придется проверить.