使用base64解码大型文件时出现MemoryError

时间:2019-02-28 12:02:13

标签: python

我正在尝试解码存储在文件中的字符串。文件大小约为300 MB。解码时会抛出MemoryError。

base64.b64decode(bytes(file_content))

对此有任何解决方案吗?

1 个答案:

答案 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)