Python 如何读取和写入二进制文件?
在接下来的几天里,我无法使用电脑,但我无法忘记这个问题。我只是在玩压缩算法,我自己为音频创建了一个压缩算法,我被困在输出到文件的步骤。所以这里是我的问题,希望我能在回来之前找到答案,否则这会吃了我的心 1) 如果我有一个带有一些整数的numpy X数组(比如int16),如果我打开一个file对象并执行file.write(X)操作,那么文件输出会是什么样子?数字?还是ASCII码?还是二进制 2) 根据上述答案,如何将此文件读入numpy数组X 基本上,我的压缩做了一些小波和fft变换,在这里和那里做了一些滤波,并返回一个带有一些数字的数组,我知道这个数组的格式,我已经在这里实现了高%的压缩,下一步是首先将这个数组转储到一个二进制文件中。一旦我实现了这一点,我的下一个目标就是实现文件/向量的某种熵编码 欢迎任何意见。1)写作: 2) 阅读: 更新: 正如J.F.Sebastian所建议的,有更好的方法可以做到这一点,比如使用:Python 如何读取和写入二进制文件?,python,numpy,binary,binaryfiles,Python,Numpy,Binary,Binaryfiles,在接下来的几天里,我无法使用电脑,但我无法忘记这个问题。我只是在玩压缩算法,我自己为音频创建了一个压缩算法,我被困在输出到文件的步骤。所以这里是我的问题,希望我能在回来之前找到答案,否则这会吃了我的心 1) 如果我有一个带有一些整数的numpy X数组(比如int16),如果我打开一个file对象并执行file.write(X)操作,那么文件输出会是什么样子?数字?还是ASCII码?还是二进制 2) 根据上述答案,如何将此文件读入numpy数组X 基本上,我的压缩做了一些小波和fft变换,在这里
- 1)写作:
2) 阅读:
更新:
正如J.F.Sebastian所建议的,有更好的方法可以做到这一点,比如使用:
file.write(X)
,不过这是一个很好的建议谢谢,这似乎很有效。如果有人读到了这条评论,当我执行f=open(…)时,我是否将文件在内存中的全部内容指向f?或者我只是将其链接到某个文件对象,并且(我怀疑)在我实际执行类似于“for line in f:..”的操作之前,不会将内容加载到内存中?只有在调用f.read()
并将其输出(对象)分配给某个目标(名称)时,才会加载文件内容。如果对f中的行使用进行迭代
一次只加载一段文件(行)。有numpy.save、.savez等在file@J.F.Sebastian是的,但问题是指file.write(X)
,不过这是一个很好的建议谢谢,这似乎很有效。如果有人读到了这条评论,当我执行f=open(…)时,我是否将文件在内存中的全部内容指向f?或者我只是将其链接到某个文件对象,并且(我怀疑)在我实际执行类似于“for line in f:..”的操作之前,不会将内容加载到内存中?只有在调用f.read()
并将其输出(对象)分配给某个目标(名称)时,才会加载文件内容。如果对f中的行使用进行迭代
一次只加载一段文件(行)。
In [1]: f = open('ints','wb')
In [2]: x = numpy.int16(array([1,2,3]))
Out[2]: array([1, 2, 3], dtype=int16)
In [3]: f.write(x)
In [4]: f.close()
In [5]: f = open('ints','wb')
In [6]: x = f.read()
In [7]: x
Out[7]: '\x01\x00\x02\x00\x03\x00'
In [8]: numpy.fromstring(x, dtype=np.uint16, count=3)
Out[8]: array([1, 2, 3], dtype=uint16)