如何分块读取大体积pickle文件?
Pickle文件分块读写说明
常见文件格式的分块/跳过读取支持
- CSV:支持pandas的
chunk size参数分块读取 - Excel:支持pandas的
skiprows参数跳过指定行 - Parquet:支持dask的
chunksize参数分块读取
Pickle的现状与需求
Pickle本身没有原生的分块(chunk)或跳过行(skiprows)设置。如果想避免大文件导致内存错误,需要在读取时拆分数据,而非加载完成后再拆分。
示例代码的作用解析
你找到的这段代码是写入时分块的:
import pickle filename = "./pickle.pickle" str_to_save = "myname" with open(filename,'wb') as file_handle: pickle.dump(str_to_save[0:4], file_handle) pickle.dump(str_to_save[4:], file_handle) with open(filename,'rb') as file_handle: result = pickle.load(file_handle) print('result1:',result) result = pickle.load(file_handle) print('result2:',result)
它将数据拆成两部分,通过多次调用pickle.dump()写入同一个文件;读取时则通过多次调用pickle.load()逐个加载分块,这样就能实现读取时按需加载,不会一次性把整个大文件读进内存,刚好符合你的需求。
补充说明
如果想实现不依赖写入时的分块、纯读取阶段拆分Pickle文件,Pickle本身没有原生支持这种操作。虽然可以通过手动控制文件流读取位置实现,但需要对Pickle的序列化格式有深入了解,可靠性较低。更稳妥的方式还是像示例代码这样,在写入大数据时主动分块存储,读取时按需加载每个分块。
内容的提问来源于stack exchange,提问作者sim
相关产品推荐
相关产品推荐

