我想使用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中执行此操作。
答案 0 :(得分:2)
你似乎对Python中的类型有些混淆。
表达式'i' + 'j'
将两个字符串加在一起。这会产生字符串ij
,它很可能以两个字节的形式写入文件。
变量i
已经是int
。您可以通过几种不同的方式将其写为4字节整数(也适用于float j
):
使用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
。
使用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)
请注意,在使用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