假设我有一个像824的数字,我用python将它写入文本文件.在文本文件中,它将占用3个字节的空间.但是,如果我使用位表示它,它具有以下表示0000001100111000,即2个字节(16位).我想知道如何在python中写入文件位,而不是字节.如果我能这样做,文件的大小将是2个字节,而不是3.请提供代码.我正在使用python 2.6.此外,我不想使用任何外部模块没有我在下面尝试的基本安装,并给了我12个字节!
a =824;
c=bin(a)
handle = open('try1.txt','wb')
handle.write(c)
handle.close()
Run Code Online (Sandbox Code Playgroud)
Mar*_*nen 10
该结构模块是你想要的.从您的示例中,824 = 0000001100111000二进制或0338十六进制.这是两个字节03H和38H. struct.pack将824转换为这两个字节的字符串,但你还必须决定little-endian(先写38H)或big-endian(先写03H).
>>> import struct
>>> struct.pack('>H',824) # big-endian
'\x038'
>>> struct.pack('<H',824) # little-endian
'8\x03'
>>> struct.pack('H',824) # Use system default
'8\x03'
Run Code Online (Sandbox Code Playgroud)
struct返回一个双字节字符串.'\ x ##'表示法表示(具有十六进制值##的字节).'8'是ASCII'8'(值38H).Python字节字符串使用ASCII表示可打印字符,使用\ x ##表示法表示不可打印字符.
下面是将二进制数据写入和读取到文件的示例.在写入和读取二进制文件时,应始终指定endian-ness,以防在具有不同endian默认值的系统上读取它:
import struct
a = 824
bin_data = struct.pack('<H',824)
print 'bin_data length:',len(bin_data)
with open('data.bin','wb') as f:
f.write(bin_data)
with open('data.bin','rb') as f:
bin_data = f.read()
print 'Value from file:',struct.unpack('<H',bin_data)[0]
print 'bin_data representation:',repr(bin_data)
for i,c in enumerate(bin_data):
print 'Byte {0} as binary: {1:08b}'.format(i,ord(c))
Run Code Online (Sandbox Code Playgroud)
bin_data length: 2
Value from file: 824
bin_data representation: '8\x03'
Byte 0 as binary: 00111000
Byte 1 as binary: 00000011
Run Code Online (Sandbox Code Playgroud)
我认为你想要的是open二进制模式的文件:
open("file.bla", "wb")
Run Code Online (Sandbox Code Playgroud)
但是,这会将一个整数写入文件,其大小可能为 4 个字节。我不知道Python是否有2字节整数类型。但是你可以通过将 2 个 16 位数字编码为一个 32 位数字来规避这一点:
a = 824
b = 1234
c = (a << 16) + b
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7227 次 |
| 最近记录: |