python – 对未知行长度的巨大文件进行二进制搜索
作者:互联网
我正在处理大量数据CSV文件.每个文件包含数百万条记录,每条记录都有一个密钥.记录按其密钥排序.我不想在搜索certian数据时查看整个文件.
我见过这个解决方案:Reading Huge File in Python
但它建议你在文件上使用相同长度的行 – 在我的情况下不支持.
我想为每行添加一个填充,然后保持固定的行长度,但我想知道是否有更好的方法来做到这一点.
我正在使用python
解决方法:
您不必拥有固定宽度记录,因为您不必进行面向记录的搜索.相反,您可以只进行面向字节的搜索,并确保在进行搜索时重新对齐键.这是一个(可能是错误的)示例,说明如何修改链接到从面向记录到面向字节的解决方案:
bytes = 24935502 # number of entries
for i, search in enumerate(list): # list contains the list of search keys
left, right = 0, bytes - 1
key = None
while key != search and left <= right:
mid = (left + right) / 2
fin.seek(mid)
# now realign to a record
if mid:
fin.readline()
key, value = map(int, fin.readline().split())
if search > key:
left = mid + 1
else:
right = mid - 1
if key != search:
value = None # for when search key is not found
search.result = value # store the result of the search
标签:python,database,io,large-files,binary-search 来源: https://codeday.me/bug/20190721/1494702.html