Comment utiliser Python pour lire et écrire des fichiers binaires

WBOY
Libérer: 2023-05-03 12:40:06
avant
3085 Les gens l'ont consulté

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, < signifie petit endian, > 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&#39;hello&#39;
Copier après la connexion
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()
Copier après la connexion
str= u&#39;hello&#39;
Copier après la connexion
str= r&#39;hello\n\t\n&#39;
Copier après la connexion
str.encode(‘utf-8&#39;)
bytes.decode(‘utf-8&#39;)
Copier après la connexion
name = &#39;Lily&#39;
print(f&#39;My name is {name}.&#39;)
Copier après la connexion
.

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!