如何在大小小于1MByte的部分中拆分列表

时间:2010-11-10 00:00:22

标签: python

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

结果列表需要保留初始排序;然后这些块将被序列化(通过Pickle)并放入具有1 MByte MAX大小的不同Blob字段。

使用Python 2.5实现这一目标的最快代码是什么?

*块的数量应该是适合1MByte约束的最低值

2 个答案:

答案 0 :(得分:1)

跟进我的评论。您可以使用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个字节的对象列表。

测量asize的性能对于仅对json字符串中的对象进行编码并将json字符串乘以sizeof(char)会很有趣。

答案 1 :(得分:0)

我找到了pympler库,asizeof模块提供了使用Python 2.2.3,2.3.7,2.4.5,2.5.1,2.5测试的一个或多个Python对象的基本大小信息。 2,2.6。