您好,登錄后才能下訂單哦!
本篇內容介紹了“如何使用Python讀寫二進制文件”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Python 讀寫文件的二進制數據需要使用到struct模塊,進行C/C++與Python數據格式的轉換。
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)解析以offset開始的緩沖區,并返回解析結果 |
calcsize(fmt) | size of fmt | 計算給定的格式(fmt)占用多少字節的內存,注意對齊方式 |
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 |
注意:代碼中,<表示小端,>表示大端
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()
后面字符串以 Unicode格式進行編碼,一般用在中文字符串前面,防止因為源碼儲存格式問題,導致再次使用時出現亂碼。
str= u'hello'
去掉反斜杠的轉移機制。(特殊字符:即那些,反斜杠加上對應字母,表示對應的特殊含義的,比如最常見的”\n”表示換行,”\t”表示Tab等。 )
str= r'hello\n\t\n'
表示該字符串是bytes 類型。
bytes = b'hello'
在 Python3 中,bytes 和 str 的互相轉換方式是
str.encode(‘utf-8') bytes.decode(‘utf-8')
以 f 開頭表示在字符串內支持大括號內的python 表達式,字符串拼接
name = 'Lily' print(f'My name is {name}.')
“如何使用Python讀寫二進制文件”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。