Skip to main content
 首页 » 编程设计

python之如何将列表 "one by one"写入 python 中的二进制文件

2025年05月04日20zengkefu

我有一段代码在每次迭代中生成相当大的列表。为了节省内存,我想在生成列表后的每次迭代中将每个列表写入一个二进制文件。 我已经用文本文件尝试过这个(甚至在 linux 中将参数设置为“wb”)。 “wb”似乎对以二进制或文本格式写入的文件没有任何影响。而且,写入的文件很大,我不想要这个。我确信如果我能以二进制格式编写这些列表,这个文件将会小得多。 谢谢

请您参考如下方法:

既然你提到了对可压缩性的需求,我建议使用 pickle与 gzip模块来压缩你的输出。您可以一次写入和读回您的列表,以下是如何操作的示例:

import gzip, pickle 
 
output = gzip.open('pickled.gz', 'wb', compresslevel=9) 
 
for x in range(10): 
     output.write(pickle.dumps(range(10)) + '\n\n') 
output.close() 

然后使用生成器一次生成一个列表:

def unpickler(input): 
    partial = [] 
    for line in input: 
        partial.append(line) 
        if line == '\n': 
            obj = ''.join(partial) 
            partial = [] 
            yield pickle.loads(obj) 
 
input = gzip.open('pickled.gz', 'rb') 
for l in unpickler(input): 
    print l 
 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]