写入二进制文件python

时间:2017-03-31 15:09:50

标签: python numpy binary

我想使用python将内容写入二进制文件。

我只是在做:

import numpy as np

f = open('binary.file','wb')
i=4
j=5.55
f.write('i'+'j') #where do i specify that i is an integer and j is a double?

g = open('binary.file','rb')
first = np.fromfile(g,dtype=np.uint32,count = 1)
second = np.fromfile(g,dtype=np.float64,count = 1)

print first, second

输出只是: [] []

我知道在Matlab中执行此操作非常容易“fwrite(binary.file,i,'int32');”,但我想在python中执行此操作。

2 个答案:

答案 0 :(得分:2)

你似乎对Python中的类型有些混淆。

表达式'i' + 'j'将两个字符串加在一起。这会产生字符串ij,它很可能以两个字节的形式写入文件。

变量i已经是int。您可以通过几种不同的方式将其写为4字节整数(也适用于float j):

  1. 使用how to write integer number in particular no of bytes in python ( file writing)中详述的struct模块。像这样:

    import struct
    with open('binary.file', 'wb') as f:
        f.write(struct.pack("i", i))
    

    您可以使用'd'说明符来编写j

  2. 使用numpy模块为您完成写作,这一点特别方便,因为您已经在使用它来读取文件。方法ndarray.tofile仅用于此目的:

    i = 4
    j = 5.55
    with open('binary.file', 'wb') as f:
        np.array(i, dtype=np.uint32).tofile(f)
        np.array(j, dtype=np.float64).tofile(f)
    
  3. 请注意,在使用open块编写文件时,我使用with作为上下文管理器。即使在写入过程中发生错误,这也可确保文件关闭。

答案 1 :(得分:-1)

那是因为您正在尝试将字符串(已编辑)写入二进制文件。在尝试再次阅读之前,您也不要关闭文件 如果要将整数或字符串写入二进制文件,请尝试添加以下代码:

import numpy as np
import struct

f = open('binary.file','wb')
i = 4
if isinstance(i, int):
    f.write(struct.pack('i', i)) # write an int
elif isinstance(i, str):
    f.write(i) # write a string
else:
    raise TypeError('Can only write str or int')

f.close()

g = open('binary.file','rb')
first = np.fromfile(g,dtype=np.uint32,count = 1)
second = np.fromfile(g,dtype=np.float64,count = 1)

print first, second    

我会留给你弄清浮号。

先打印,然后打印第二个 [4] []

pythonic文件处理程序的方式越多:

import numpy as np
import struct

with open ('binary.file','wb') as f:
    i = 4
    if isinstance(i, int):
        f.write(struct.pack('i', i)) # write an int
    elif isinstance(i, str):
        f.write(i) # write a string
    else:
        raise TypeError('Can only write str or int')

with open('binary.file','rb') as g:
    first = np.fromfile(g,dtype=np.uint32,count = 1)
    second = np.fromfile(g,dtype=np.float64,count = 1)

print first, second