该文件有5 5gb长。
我确实在stackoverflow上发现了一个类似的问题,人们建议使用numpy数组,但我认为这个解决方案应该适用于数字集合,而不是字符串。
有没有什么比eval(list.txt)或者在列表中设置变量导入python文件更好的方法呢?
加载/保存python字符串列表的最有效方法是什么?
发布于 2018-07-05 09:15:41
对于只读情况:
import numpy as np
class IndexedBlob:
def __init__(self, filename):
index_filename = filename + '.index'
blob = np.memmap(filename, mode='r')
try:
# if there is an existing index
indices = np.memmap(index_filename, dtype='>i8', mode='r')
except FileNotFoundError:
# else, create it
indices, = np.where(blob == ord('\n'))
# force dtype to predictable file
indices = np.array(indices, dtype='>i8')
with open(index_filename, 'wb') as f:
# add a virtual newline
np.array(-1, dtype='>i8').tofile(f)
indices.tofile(f)
# then reopen it as a file to reduce memory
# (and also pick up that -1 we added)
indices = np.memmap(index_filename, dtype='>i8', mode='r')
self.blob = blob
self.indices = indices
def __getitem__(self, line):
assert line >= 0
lo = self.indices[line] + 1
hi = self.indices[line + 1]
return self.blob[lo:hi].tobytes().decode()
一些额外的注意事项:
IndexedBlob
对象中看到它,则需要重新执行mmap
。n
换行符进行故事化,然后在查找时进行线性搜索来显著缩小索引的大小。'\n
.而不是'\0'
作为分隔符,重写整个文件并重新生成索引并不是太expensive.
当然还有:
无论你做什么,
https://stackoverflow.com/questions/51181556
复制相似问题