我正在尝试解码存储在文件中的字符串。文件大小约为300 MB。解码时会抛出MemoryError。
base64.b64decode(bytes(file_content))
对此有任何解决方案吗?
答案 0 :(得分:0)
如果您的输入数据还没有<Field type="text" />
,则您只是强制执行了不必要的复制以创建真实的bytes
对象。令人讨厌的是,即使底层API(bytes
)正确支持缓冲协议(看来,base64.b64decode
也会为您执行除bytearray
之外的所有输入的此不必要的转换,所以它可以正常工作很好,例如,映射文件)。
因此,如果要避免不必要的复制,请更改为:
binascii.a2b_base64
解码时完全不复制输入。
另一个通用技巧是确保您运行的是64位版本的Python(可悲的是,Windows的默认建议安装程序仍为32位)。当您谈论数百MB的数据时,它的副本在周围浮动,很容易达到用户模式虚拟地址空间的2 GB限制,而升级到64位Python将为您解决这一问题(您的代码可能是如果您没有足够的RAM,则速度会变慢,但是它不应轻易死于binascii.a2b_base64(file_content)
。