Naf*_*Kay 2 python binary file python-2.7
我有一个在Python中打开的文件,正在写入另一个输出文件。我需要它是文件大小的16的倍数,所以这是我设计的:
with open(input_file, 'rb') as infile:
with open(output_file, 'wb') as outfile:
while True:
input_chunk = infile.read(64)
if len(input_chunk) == 0:
break
elif len(input_chunk) % 16 > 0:
input_chunk.extend([0 for i in range(len(input_chunk) % 16)])
output_file.write(input_chunk)
Run Code Online (Sandbox Code Playgroud)
不幸的是,它无法将零附加到:
AttributeError: 'str' object has no attribute 'extend'
Run Code Online (Sandbox Code Playgroud)
首先,为什么我在这里有一个字符串,而不是一个字节数组?我正在以二进制模式读取二进制文件。
其次,如果我正在处理一个字符串,我该如何0在该字符串的末尾写入一些带有该值的字节?
首先,为什么我在这里有一个字符串,而不是一个字节数组?
因为那才是file.read回报...
其次,如果我正在处理一个字符串,如何在该字符串的末尾写入多个值为0的字节?
您不能将其写入该字符串,因为字符串是不可变的。但是,您可以将其写到其他字符串上,并通过串联创建新字符串:
>>> import struct
>>> input_chunk = 'foo bar baz'
>>> input_chunk + struct.pack('16B',*([0]*16))
'foo bar baz\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>>
Run Code Online (Sandbox Code Playgroud)
请注意,如果您知道自己有64个字节,并且想要一个80字节的字符串,并用null填充,struct.pack 则将使用null自动填充它:
struct.pack('80s',string_of_64_bytes)
Run Code Online (Sandbox Code Playgroud)
对于's'格式字符,该计数被解释为字符串的大小,而不是像其他格式字符一样的重复计数。例如,“ 10s”表示一个10字节的字符串,而“ 10c”表示10个字符。如果未提供计数,则默认为1。对于打包,将适当地将字符串截断或填充空字节以使其适合。对于解压缩,结果字符串始终具有完全指定的字节数。在特殊情况下,“ 0s”表示单个空字符串(而“ 0c”表示0个字符)。
| 归档时间: |
|
| 查看次数: |
13427 次 |
| 最近记录: |