Endereço original: https://blog.csdn.net/and_then111/article/details/86744938
1. O que é um arquivo .bin
Um arquivo com extensão .bin é um arquivo binário. Ao contrário dos arquivos de texto, os arquivos binários abertos com o Bloco de notas, o Notepad ++ etc. são ilegíveis.
É assim:
Mas os arquivos .bin podem ser abertos com software como o WINHEX. Todos os dados armazenados no arquivo binário podem ser entendidos apenas pela leitura de acordo com uma regra predeterminada.
O WINHEX converte o conteúdo dos arquivos binários em formato hexadecimal:
as vantagens dos arquivos binários em comparação aos arquivos de texto: economia de espaço de armazenamento, leitura e gravação rápidas e certa proteção de criptografia.
Sobre arquivos binários e arquivos de texto, você pode consultar esta série de programadores de blogs: não me blefe: arquivos binários
2. Leia e grave arquivos binários
2.1 Lendo arquivos binários
Leia o conteúdo do arquivo binário "x.bin" e produza um byte de cada vez.
(1) Coloque o caminho do arquivo filepath
, aqui o arquivo .bin e o arquivo de código são colocados na mesma pasta, para que nenhum caminho absoluto seja gravado.
(2) open(filepath, 'rb')
: Abra o arquivo na forma de leitura, preste atenção ao usorb Para ler o arquivo binário.
(3) Lembre-se de fechar: binfile.close()
import struct
import os
if __name__ == '__main__':
filepath='x.bin'
binfile = open(filepath, 'rb') #打开二进制文件
size = os.path.getsize(filepath) #获得文件大小
for i in range(size):
data = binfile.read(1) #每次输出一个字节
print(data)
binfile.close()
Execute, produza o resultado:
Se você deseja ver o resultado decimal, pode usar o método struct.unpack () no Python :: O significado do
struct.unpack('B', data)
parâmetro aqui B
é converter o tipo de caracter não assinado dos dados da estrutura C em número inteiro no Python.
O número obtido aqui é o tipo de tupla, portanto Use num[0]
para remover o número.
for i in range(size):
data = binfile.read(1)
num = struct.unpack('B', data)
print(num[0])
A saída é:
2.2 Escrevendo arquivos binários
(1) Suponha que você queira escrever o número 123 em um arquivo binário, primeiro você precisa converter o número int type em bytes.
data.to_bytes(1, 'big')
: Parâmetro ' 1
': convertido em bytes de 1 byte; parâmetro 'big
': byteorder.
Veja
a
o tipo de uma variável , você pode usartype()
a=123
print('a:',type(a))
b=a.to_bytes(1,'big')
print('b:',type(b))
Saída:
(2) open(filepath, 'ab+')
: abra o arquivo binário no modo de gravação.
Nota ao escrever: usede + Para concluir a gravação adicional, use wbPara concluir a substituição.
(3) Fecharbinfile.close()
data=123
content= data.to_bytes(1, 'big')
filepath='123.bin'
binfile = open(filepath, 'ab+') #追加写入
binfile.write(content)
print('content',content)
binfile.close()
2.3 Modo de arquivo aberto
Lista os diferentes modos de abrir o arquivo, que é open()
o segundo parâmetro. O parâmetro com b significa arquivo binário de operação e arquivo de texto de operação sem b.
Trecho da leitura e gravação de arquivos Python (open (), close (), com open () como f ...
Padrão | Descrição do produto |
---|---|
r | Abra o arquivo como somente leitura. O ponteiro do arquivo será colocado no início do arquivo. Este é o modo padrão. |
rb | Abra um arquivo em formato binário para somente leitura. O ponteiro do arquivo será colocado no início do arquivo. Este é o modo padrão. |
r + | Abra um arquivo para leitura e gravação. O ponteiro do arquivo será colocado no início do arquivo. |
rb + | Abra um arquivo em formato binário para leitura e gravação. O ponteiro do arquivo será colocado no início do arquivo. |
W | Abra um arquivo apenas para gravação. Se o arquivo já existir, ele será substituído. Se o arquivo não existir, crie um novo arquivo. |
wb | Abra um arquivo em formato binário apenas para gravação. Se o arquivo já existir, ele será substituído. Se o arquivo não existir, crie um novo arquivo. |
w + | Abra um arquivo para leitura e gravação. Se o arquivo já existir, ele será substituído. Se o arquivo não existir, crie um novo arquivo. |
wb + | Abra um arquivo em formato binário para leitura e gravação. Se o arquivo já existir, ele será substituído. Se o arquivo não existir, crie um novo arquivo. |
uma | Abra um arquivo para anexar. Se o arquivo já existir, o ponteiro do arquivo será colocado no final do arquivo. Em outras palavras, o novo conteúdo será gravado após o conteúdo existente. Se o arquivo não existir, crie um novo arquivo para gravação. |
de | Abra um arquivo para anexar em formato binário. Se o arquivo já existir, o ponteiro do arquivo será colocado no final do arquivo. Em outras palavras, o novo conteúdo será gravado após o conteúdo existente. Se o arquivo não existir, crie um novo arquivo para gravação. |
a + | Abra um arquivo para leitura e gravação. Se o arquivo já existir, o ponteiro do arquivo será colocado no final do arquivo. O arquivo estará no modo de acréscimo quando for aberto. Se o arquivo não existir, crie um novo arquivo para leitura e gravação. |
de + | Abra um arquivo para anexar em formato binário. Se o arquivo já existir, o ponteiro do arquivo será colocado no final do arquivo. Se o arquivo não existir, crie um novo arquivo para leitura e gravação. |