Python 如何读取和写入二进制文件?

Python 如何读取和写入二进制文件?,python,numpy,binary,binaryfiles,Python,Numpy,Binary,Binaryfiles,在接下来的几天里,我无法使用电脑,但我无法忘记这个问题。我只是在玩压缩算法,我自己为音频创建了一个压缩算法,我被困在输出到文件的步骤。所以这里是我的问题,希望我能在回来之前找到答案,否则这会吃了我的心 1) 如果我有一个带有一些整数的numpy X数组(比如int16),如果我打开一个file对象并执行file.write(X)操作,那么文件输出会是什么样子?数字?还是ASCII码?还是二进制 2) 根据上述答案,如何将此文件读入numpy数组X 基本上,我的压缩做了一些小波和fft变换,在这里

在接下来的几天里,我无法使用电脑,但我无法忘记这个问题。我只是在玩压缩算法,我自己为音频创建了一个压缩算法,我被困在输出到文件的步骤。所以这里是我的问题,希望我能在回来之前找到答案,否则这会吃了我的心

1) 如果我有一个带有一些整数的numpy X数组(比如int16),如果我打开一个file对象并执行file.write(X)操作,那么文件输出会是什么样子?数字?还是ASCII码?还是二进制

2) 根据上述答案,如何将此文件读入numpy数组X

基本上,我的压缩做了一些小波和fft变换,在这里和那里做了一些滤波,并返回一个带有一些数字的数组,我知道这个数组的格式,我已经在这里实现了高%的压缩,下一步是首先将这个数组转储到一个二进制文件中。一旦我实现了这一点,我的下一个目标就是实现文件/向量的某种熵编码

欢迎任何意见。

1)写作:

2) 阅读:

更新:

正如J.F.Sebastian所建议的,有更好的方法可以做到这一点,比如使用:

或者正如Janne Karila建议的那样,使用:

    • 1)写作:

      2) 阅读:

      更新:

      正如J.F.Sebastian所建议的,有更好的方法可以做到这一点,比如使用:

      或者正如Janne Karila建议的那样,使用:


      有numpy.save、.savez等将元数据存储在file@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)