Maison  >  Article  >  développement back-end  >  Comment utiliser Python pour lire et écrire des fichiers binaires

Comment utiliser Python pour lire et écrire des fichiers binaires

WBOY
WBOYavant
2023-05-03 12:40:063044parcourir

1. Introduction

Python doit utiliser le module struct pour lire et écrire les données binaires des fichiers afin de convertir les formats de données C/C++ et Python.

2. Introduction au module struct

Les fonctions les plus couramment utilisées dans le module struct sont pack et unpack. L'utilisation est la suivante :

pack_into(fmt,buffer,offset,v1, v2… )unpack(fmt,v1,v2……)pack_from(fmt, buffer,offset)calcsize(fmt)3. Le format de données fmt dans le module struct correspond au type en C/C++ et PythonC Type
pack( fmt,v1,v2… ) string Convertissez les données en une chaîne (flux d'octets) selon le format donné (fmt), et renvoyez la chaîne.
Aucun Convertissez les données en une chaîne (flux d'octets) selon le format donné (fmt) et écrivez le flux d'octets dans le tampon en commençant par offset (le tampon est un tampon inscriptible, module de tableau disponible)
tuple analyse le flux d'octets selon le format donné (fmt) et renvoie le résultat de l'analyse
tuple analyse le tampon en commençant par offset selon le format donné (fmt) et renvoie le résultat de l'analyse
taille de fmt calcule le format donné (fmt) prend combien octets de mémoire, faites attention à l'alignement
Format
Python type

Taille standard 1 ?_Boolbool1hshortinteger2H non signé shortinteger2iintinteger4Ientier non signéentier4llongentier 4H ed long longentier8f flotteurflotteur4ddoublefloat8schar[]string pP void *integer4. ExempleRemarque : dans le code, d7bbf0e6acf4e5878feb05864820db92 signifie grand endian 5. , f devant une chaîne Python 5.1. Ajoutez u devant une chaîne La chaîne suivante est codée au format Unicode, généralement utilisé devant les chaînes chinoises pour éviter un problème de format de stockage du code source, entraînant des caractères tronqués lorsque utilisé à nouveau. 5.2. Le mécanisme de transfert consistant à ajouter r avant la chaîne pour supprimer la barre oblique inverse. (Caractères spéciaux : c'est-à-dire ceux, barre oblique inverse et lettres correspondantes, indiquant la signification spéciale correspondante, comme le "n" le plus courant signifie un saut de ligne, "t" signifie Tabulation, etc.) 5.3. Ajoutez b avant le. string indique que la chaîne est de type octets.
bytes = b'hello'
En Python3, la méthode de conversion mutuelle entre octets et str est 5.4 Ajouter f avant une chaîneCommencer par f signifie que les expressions python entre accolades sont prises en charge dans la chaîne et la concaténation de chaînes
signed char integer
B unsigned char integer 1
char[ ] string
import struct

# 打开文件
with open("binary_file.bin", "wb") as f:

    # 写入4个字节的整数(值为12345)
    int_value = 12345
    f.write(struct.pack("<i", int_value))

    # 写入8个字节的双精度浮点数(值为3.14159)
    double_value = 3.14159
    f.write(struct.pack("<d", double_value))

    # 写入一个字节的布尔值(值为True)
    bool_value = True
    f.write(struct.pack("<?", bool_value))

    # 写入一个定长字符串(10个字符,值为"hello")
    string_value = "hello".encode("utf-8")
    f.write(struct.pack("<5s", string_value))

    # 写入一个定长字节数组(20个字节,值为b"\x01\x02\x03...\x14")
    byte_array_value = bytes(range(1, 21))
    f.write(struct.pack("<20s", byte_array_value))

    f.close()

# 打开文件
with open("binary_file.bin", "rb") as f:

    # 读取4个字节,解析成一个整数
    int_value = struct.unpack("<i", f.read(4))[0]
    
    # 读取8个字节,解析成一个双精度浮点数
    double_value = struct.unpack("<d", f.read(8))[0]

    # 读取一个字节,解析成一个布尔值
    bool_value = struct.unpack("<?", f.read(1))[0]

    # 读取一个字符串,解析成一个定长字符串(10个字符)
    string_value = struct.unpack("<5s", f.read(5))[0].decode("utf-8")

    # 读取一个字节数组,解析成一个定长字节数组(20个字节)
    byte_array_value = struct.unpack("<20s", f.read(20))[0]

    # 打印结果
    print(f"int_value: {int_value}")
    print(f"double_value: {double_value}")
    print(f"bool_value: {bool_value}")
    print(f"string_value: {string_value}")
    print(f"byte_array_value: {byte_array_value}")

    f.close()
str= u&#39;hello&#39;
str= r&#39;hello\n\t\n&#39;
str.encode(‘utf-8&#39;)
bytes.decode(‘utf-8&#39;)
name = &#39;Lily&#39;
print(f&#39;My name is {name}.&#39;)
.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer