gpt4 book ai didi

python - 在 Python 中读取大文件

转载 作者:太空狗 更新时间:2023-10-29 17:24:23 27 4
gpt4 key购买 nike

我有一个包含 5000 万行的 384MB 文本文件。每行包含 2 个以空格分隔的整数:一个键和一个值。该文件按键排序。我需要一种有效的方法来在 Python 中查找大约 200 个键的列表的值。

我目前的方法包括在下面。需要 30 秒。必须有更高效的 Python foo 才能将其降低到最多几秒钟的合理效率。

# list contains a sorted list of the keys we need to lookup
# there is a sentinel at the end of list to simplify the code
# we use pointer to iterate through the list of keys
for line in fin:
line = map(int, line.split())
while line[0] == list[pointer].key:
list[pointer].value = line[1]
pointer += 1
while line[0] > list[pointer].key:
pointer += 1
if pointer >= len(list) - 1:
break # end of list; -1 is due to sentinel

编码的二进制搜索 + 寻求解决方案(感谢 kigurai!):

entries = 24935502 # number of entries
width = 18 # fixed width of an entry in the file padded with spaces
# at the end of each line
for i, search in enumerate(list): # list contains the list of search keys
left, right = 0, entries-1
key = None
while key != search and left <= right:
mid = (left + right) / 2
fin.seek(mid * width)
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

最佳答案

如果你只需要 5000 万行中的 200 行,那么将其全部读入内存是一种浪费。我会对搜索键列表进行排序,然后使用 seek() 或类似的东西对文件进行二进制搜索。这样你就不会将整个文件读入内存,我认为这应该会加快速度。

关于python - 在 Python 中读取大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/744256/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com