ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 对未知行长度的巨大文件进行二进制搜索

2019-07-21 18:56:59  阅读:257  来源: 互联网

标签:python database io large-files binary-search


我正在处理大量数据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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有