怎麼使用Python讀寫二進位文件

WBOY
發布: 2023-05-03 12:40:06
轉載
3085 人瀏覽過

1. 簡介

Python 讀寫檔案的二進位資料需要使用到struct模組,進行C/C 與Python資料格式的轉換。

2.struct模組介紹

struct模組中最常用的函式為pack和unpack,用法如下:

函數 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)佔用多少位元組的內存,注意對齊方式FormatC TypePython typeStandard size#xpad byteno 值#ccharstring of length1#bsigned charinteger1Bunsigned char#integer1?_Boolbool1#hH##2iintinteger4#I##unsigned int#long##4Lunsigned longinteger#4qlong longinteger8Qunsigned long longinteger# 8ffloat##d#double8
依照給定的格式(fmt)解析以offset開始的緩衝區,並傳回解析結果 #calcsize(fmt) size of fmt
#3. struct模組中資料格式fmt對應C/C 和Python中的類型
##short integer 2
unsigned short integer
integer 4 l
integer

float
4
float
#s char[] #string

p

char[]

#string

P

void *

integer

###4. 實例## ####注意:程式碼中,<表示小端,>表示大端###
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. Python 字串前面加u,r,b,f的意思######5.1 . 字串前加u######後面字串以Unicode格式進行編碼,一般用在中文字串前面,防止因為原始碼儲存格式問題,導致再次使用時出現亂碼。 ###
str= u&#39;hello&#39;
登入後複製
###5.2. 字串前加上r######去掉反斜線的轉移機制。 (特殊字元:即那些,反斜線加上對應字母,表示對應的特殊含義的,例如最常見的”\n”表示換行,”\t”表示Tab等。)###
str= r&#39;hello\n\t\n&#39;
登入後複製
###5.3 . 字串前加b######表示字串是bytes 類型。 ###
bytes = b&#39;hello&#39;
登入後複製
###在Python3 中,bytes 和str 的互相轉換方式是###
str.encode(‘utf-8&#39;)
bytes.decode(‘utf-8&#39;)
登入後複製
###5.4. 字串前加f######以f 開頭表示在字串內支援大括號內的python 表達式,字串拼接###
name = &#39;Lily&#39;
print(f&#39;My name is {name}.&#39;)
登入後複製

以上是怎麼使用Python讀寫二進位文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!