代码之家  ›  专栏  ›  技术社区  ›  systempuntoout

如何将列表拆分为大小小于1字节的部分

  •  2
  • systempuntoout  · 技术社区  · 14 年前

    我有一个远程API调用返回的字典的排序列表(通常响应小于4 MB)。
    我想将这个列表分成块,其中结果单个块的最大允许大小为1 MB。 *

    结果的块列表需要保留初始排序;然后这些块将被序列化(通过pickle)并放入最大大小为1 MB的不同blob字段中。

    用Python2.5实现这一点最快的代码是什么?

    *块的数量应该是适合1字节约束的最小值

    2 回复  |  直到 14 年前
        1
  •  1
  •   Manuel Salvadores    14 年前

    跟进我的评论。你可以用 this extension . 以及下面的脚本。假设这不会优化块的大小。它只保证它们中没有一个大于max

    from sizeof import asizeof
    
    matrix=[]
    new_chunk = []
    size_of_current_chunk = 0
    for x in your_sorted_list:
        s = asize(x)
        if size_of_current_chunk + s > MAX:
            matrix.append(new_chunk)
            size_of_current_chunk = 0
            new_chunk = []
        size_of_chunk += s
        new_chunk.append(x)
    
    if len(new_chunk):
        matrix.append(new_chunk)
    

    元素 matrix 将包含每个对象中小于max字节的对象列表。

    将对象编码为JSON字符串,并将JSON字符串乘以sizeof(char),测量asize的性能是很有趣的。

        2
  •  0
  •   systempuntoout    14 年前

    我找到了 pympler 图书馆 asizeof 模块为用python 2.2.3、2.3.7、2.4.5、2.5.1、2.5.2、2.6测试的一个或多个python对象提供基本大小信息。