Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan Python untuk membaca dan menulis fail binari

Cara menggunakan Python untuk membaca dan menulis fail binari

WBOY
WBOYke hadapan
2023-05-03 12:40:063047semak imbas

1. Pengenalan

Python perlu menggunakan modul struct untuk membaca dan menulis data binari fail untuk menukar format data C/C++ dan Python.

2. Pengenalan kepada modul struct

Fungsi yang paling biasa digunakan dalam modul struct ialah pack dan unpack Penggunaannya adalah seperti berikut:

函数 return explain
pack(fmt,v1,v2…) string 按照给定的格式(fmt),把数据转换成字符串(字节流),并将该字符串返回.
pack_into(fmt,buffer,offset,v1,v2…) None 按照给定的格式(fmt),将数据转换成字符串(字节流),并将字节流写入以offset开始的buffer中.(buffer为可写的缓冲区,可用array模块)
unpack(fmt,v1,v2……) tuple 按照给定的格式(fmt)解析字节流,并返回解析结果
pack_from(fmt,buffer,offset) tuple 按照给定的格式(fmt)解析以offset开始的缓冲区,并返回解析结果
calcsize(fmt) size of fmt 计算给定的格式(fmt)占用多少字节的内存,注意对齐方式

3. Format data fmt dalam modul struct sepadan dengan Jenis dalam C/C++ dan Python

Format C Type Python type Standard size
x pad byte no value
c char string of length 1
b signed char integer 1
B unsigned char integer 1
? _Bool bool 1
h short integer 2
H unsigned short integer 2
i int integer 4
I unsigned int integer 4
l long integer 4
L unsigned long integer 4
q long long integer 8
Q unsigned long long integer 8
f float float 4
d double float 8
s char[] string
p char[] string
P void * integer

4 Contoh

Nota: Dalam kod, < bermaksud endian kecil, > endian

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()

5 . Maksud menambah u, r, b, f di hadapan rentetan Python

5.1. Tambah u

di hadapan rentetan, dan rentetan berikut dikodkan dalam format Unikod, biasanya digunakan di hadapan rentetan Cina , untuk mengelakkan masalah format penyimpanan kod sumber daripada menyebabkan aksara bercelaru apabila digunakan semula.

str= u&#39;hello&#39;

5.2. Tambahkan r

sebelum rentetan untuk mengalih keluar mekanisme pemindahan garis serong ke belakang. (Aksara khas: itu, garis miring ke belakang ditambah huruf yang sepadan, menunjukkan makna khas yang sepadan, seperti "n" yang paling biasa bermaksud pemisah baris, "t" bermaksud Tab, dsb.)

str= r&#39;hello\n\t\n&#39;

5.3 Penambahan Aksara b

sebelum rentetan menunjukkan bahawa rentetan itu daripada jenis bait.

bytes = b&#39;hello&#39;

Dalam Python3, kaedah penukaran bersama antara bait dan str ialah

str.encode(‘utf-8&#39;)
bytes.decode(‘utf-8&#39;)

5.4. Tambahkan f sebelum rentetan

Bermula dengan f bermakna pendakap disokong dalam rentetan. Ungkapan Python dalam, penggabungan rentetan

name = &#39;Lily&#39;
print(f&#39;My name is {name}.&#39;)

Atas ialah kandungan terperinci Cara menggunakan Python untuk membaca dan menulis fail binari. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam