本文主要是介绍mac系统Python Pickle报错:OSError: [Errno 22] Invalid argument,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述
在Python代码中使用Pickle模块dump一个对象,报错:
>>> with open(path, 'wb') as f:
>>> pickle.dump(self, f)Traceback (most recent call last):File "<stdin>", line 1, in <module>
OSError: [Errno 22] Invalid argument
相关环境参数:
操作系统:macOS 10.13.4
Python版本:Python 3.6.3
解决方案
出现该问题的原因是Pickle的对象太大,超过了2G,在OSX系统中无法直接dump,需要借助bytearray进行文件写入,如下所示:
import pickle
import os.pathfile_path = "pkl.pkl"
n_bytes = 2**31
max_bytes = 2**31 - 1
data = bytearray(n_bytes)## write
bytes_out = pickle.dumps(data)
with open(file_path, 'wb') as f_out:for idx in range(0, len(bytes_out), max_bytes):f_out.write(bytes_out[idx:idx+max_bytes])
这篇关于mac系统Python Pickle报错:OSError: [Errno 22] Invalid argument的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!