作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设我有一个像 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()
最佳答案
struct模块是你想要的。在您的示例中,824 = 0000001100111000 二进制或 0338 十六进制。这是两个字节 03H 和 38H。 struct.pack会将824转换为这两个字节的字符串,但你还必须决定是小端(先写38H)还是大端(先写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'
struct 返回一个两字节的字符串。 '\x##' 符号表示(具有十六进制值的字节 ##)。 “8”是一个 ASCII“8”(值 38H)。 Python 字节字符串使用 ASCII 表示可打印字符,使用\x## 表示法表示不可打印字符。
下面是一个将二进制数据写入和读取文件的示例。在写入和读取二进制文件时,您应该始终指定字节序,以防在具有不同字节序默认值的系统上读取它:
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))
bin_data length: 2
Value from file: 824
bin_data representation: '8\x03'
Byte 0 as binary: 00111000
Byte 1 as binary: 00000011
关于python - 如何将单个位写入python中的文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205487/
我是一名优秀的程序员,十分优秀!