直接从numpy数组创建zipfile,而不需要中间fi

2024-09-27 23:24:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用tofile函数从NumPy数组中写入大量二进制数据。在

因为我想节省空间,所以我想知道是否可以不必先写二进制文件,然后压缩它,然后删除它,就可以以压缩的zip格式写入该文件。在

代码的相关部分非常简单。其中energies2DL是二维Python列表:

energiesA = np.array(energies2DL, dtype=np.float32)
energiesA.tofile('ACE_ions_fieldrotation.bin')

Tags: 文件数据函数代码numpy格式np二进制
2条回答

还有一个选择。使用tostring()方法将数组中的数据转换为字符串,然后使用gzip库将字符串写入压缩文件。在

例如

In [8]: foo
Out[8]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

In [9]: import gzip

In [10]: f = gzip.open('foo.bin.gz', 'wb')

In [11]: f.write(foo.tostring())
Out[11]: 128

In [12]: f.close()

查看终端中的文件:

^{pr2}$

)如果我们能写就好了

f = gzip.open('foo.bin.gz', 'wb')
foo.tofile(f)
f.close()

但是不幸的是,numpy tofile()方法不接受gzip.open()返回的gzip file对象

可以使用^{}以压缩的NPZ格式保存数组。必须使用^{}将文件读回数组。在

示例:将foo保存到foo.npz

In [61]: foo
Out[61]: 
array([[ 0.    ,  0.0625,  0.125 ,  0.1875],
       [ 0.25  ,  0.3125,  0.375 ,  0.4375],
       [ 0.5   ,  0.5625,  0.625 ,  0.6875],
       [ 0.75  ,  0.8125,  0.875 ,  0.9375]])

In [62]: np.savez_compressed("foo.npz", foo=foo)

(可以通过提供更多参数将多个数组保存到文件中。)

将数据读回数组:

^{pr2}$

相关问题 更多 >

    热门问题