def merge(cls, parts, destfile = None, tempdir = None,
discard_duplicates = False, discard_duplicate_keys = False):
if destfile is None:
destfile = tempfile.NamedTemporaryFile(dir = tempdir)
dtype = cls.dtype
basepos = destfile.tell()
# Reserve space for the header
write = destfile.write
write(cls._Header.pack(0, 0))
indexpos = basepos + cls._Header.size
# Merge the indexes
index = _merge_all([mapper.index for mapper in parts], dtype)
write(buffer(index))
nitems = len(index)
finalpos = destfile.tell()
if finalpos & 31:
write("\x00" * (32 - (finalpos & 31)))
finalpos = destfile.tell()
destfile.seek(basepos)
write(cls._Header.pack(nitems, indexpos - basepos))
destfile.seek(finalpos)
destfile.flush()
rv = cls.map_file(destfile, basepos, size = finalpos - basepos)
destfile.seek(finalpos)
return rv
评论列表
文章目录