在python中将二进制整数或字符串写入文件

KFo*_*Fox 9 python binary file-io file

我在Python中有一个字符串(也可能是整数),我想将它写入文件.它只包含1和0我想要将1和0的模式写入文件.我想直接编写二进制文件,因为我需要存储大量数据,但只需要存储某些值.当我只需要三个时,我认为没有必要占用每个值使用8位的空间.

例如.假设我要将二进制字符串写入"01100010"文件.如果我在文本编辑器中打开它会说b(01100010是b的ascii代码).不要混淆.我不想写ascii代码,这个例子只是为了表明我想直接将字节写入文件.


澄清:

我的字符串看起来像这样:

binary_string = "001011010110000010010"
Run Code Online (Sandbox Code Playgroud)

它不是由数字或字符的二进制代码组成.它包含仅与我的程序相关的数据.

Rya*_*ing 8

要写出一个字符串,您可以使用该文件的.write方法.要写一个整数,您需要使用该struct模块

import struct

#...
with open('file.dat', 'wb') as f:
    if isinstance(value, int):
        f.write(struct.pack('i', value)) # write an int
    elif isinstance(value, str):
        f.write(value) # write a string
    else:
        raise TypeError('Can only write str or int')
Run Code Online (Sandbox Code Playgroud)

但是,int和string的表示形式不同,您可以使用该bin函数将其转换为0和1的字符串

>>> bin(7)
'0b111'
>>> bin(7)[2:] #cut off the 0b
'111'
Run Code Online (Sandbox Code Playgroud)

但也许处理所有这些问题int的最佳方法是确定文件中二进制字符串的固定宽度,并将其转换为:

>>> x = 7
>>> '{0:032b}'.format(x) #32 character wide binary number with '0' as filler
'00000000000000000000000000000111'
Run Code Online (Sandbox Code Playgroud)


KFo*_*Fox 7

好的,经过相当多的搜索,我找到了答案.我相信你们其他人根本就不明白(这可能是我的错,因为我必须编辑两次才能说清楚).我在这里找到.

答案是拆分每个数据,将它们转换为二进制整数,然后将它们放在二进制数组中.之后,您可以使用数组的tofile()方法写入文件.

from array import *

bin_array = array('B')

bin_array.append(int('011',2))
bin_array.append(int('010',2))
bin_array.append(int('110',2))

f = file('binary.mydata','wb')
bin_array.tofile(f)
f.close()
Run Code Online (Sandbox Code Playgroud)