亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python讀寫(xiě)二進(jìn)制文件的實(shí)現(xiàn)

 更新時(shí)間:2023年04月13日 11:10:05   作者:大作家佚名  
本文主要介紹了Python讀寫(xiě)二進(jìn)制文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1. 簡(jiǎn)介

Python 讀寫(xiě)文件的二進(jìn)制數(shù)據(jù)需要使用到struct模塊,進(jìn)行C/C++與Python數(shù)據(jù)格式的轉(zhuǎn)換。

2. struct模塊介紹

struct模塊中最常用的函數(shù)為pack和unpack,用法如下:

函數(shù)returnexplain
pack(fmt,v1,v2…)string按照給定的格式(fmt),把數(shù)據(jù)轉(zhuǎn)換成字符串(字節(jié)流),并將該字符串返回.
pack_into(fmt,buffer,offset,v1,v2…)None按照給定的格式(fmt),將數(shù)據(jù)轉(zhuǎn)換成字符串(字節(jié)流),并將字節(jié)流寫(xiě)入以offset開(kāi)始的buffer中.(buffer為可寫(xiě)的緩沖區(qū),可用array模塊)
unpack(fmt,v1,v2……)tuple按照給定的格式(fmt)解析字節(jié)流,并返回解析結(jié)果
pack_from(fmt,buffer,offset)tuple按照給定的格式(fmt)解析以offset開(kāi)始的緩沖區(qū),并返回解析結(jié)果
calcsize(fmt)size of fmt計(jì)算給定的格式(fmt)占用多少字節(jié)的內(nèi)存,注意對(duì)齊方式

3. struct模塊中數(shù)據(jù)格式fmt對(duì)應(yīng)C/C++和Python中的類(lèi)型

FormatC TypePython typeStandard size
xpad byteno value
ccharstring of length1
bsigned charinteger1
Bunsigned charinteger1
?_Boolbool1
hshortinteger2
Hunsigned shortinteger2
iintinteger4
Iunsigned intinteger4
llonginteger4
Lunsigned longinteger4
qlong longinteger8
Qunsigned long longinteger8
ffloatfloat4
ddoublefloat8
schar[]string
pchar[]string
Pvoid *integer

4. 實(shí)例

注意:代碼中,<表示小端,>表示大端

import struct

# 打開(kāi)文件
with open("binary_file.bin", "wb") as f:

? ? # 寫(xiě)入4個(gè)字節(jié)的整數(shù)(值為12345)
? ? int_value = 12345
? ? f.write(struct.pack("<i", int_value))

? ? # 寫(xiě)入8個(gè)字節(jié)的雙精度浮點(diǎn)數(shù)(值為3.14159)
? ? double_value = 3.14159
? ? f.write(struct.pack("<d", double_value))

? ? # 寫(xiě)入一個(gè)字節(jié)的布爾值(值為T(mén)rue)
? ? bool_value = True
? ? f.write(struct.pack("<?", bool_value))

? ? # 寫(xiě)入一個(gè)定長(zhǎng)字符串(10個(gè)字符,值為"hello")
? ? string_value = "hello".encode("utf-8")
? ? f.write(struct.pack("<5s", string_value))

? ? # 寫(xiě)入一個(gè)定長(zhǎng)字節(jié)數(shù)組(20個(gè)字節(jié),值為b"\x01\x02\x03...\x14")
? ? byte_array_value = bytes(range(1, 21))
? ? f.write(struct.pack("<20s", byte_array_value))

? ? f.close()

# 打開(kāi)文件
with open("binary_file.bin", "rb") as f:

? ? # 讀取4個(gè)字節(jié),解析成一個(gè)整數(shù)
? ? int_value = struct.unpack("<i", f.read(4))[0]
? ??
? ? # 讀取8個(gè)字節(jié),解析成一個(gè)雙精度浮點(diǎn)數(shù)
? ? double_value = struct.unpack("<d", f.read(8))[0]

? ? # 讀取一個(gè)字節(jié),解析成一個(gè)布爾值
? ? bool_value = struct.unpack("<?", f.read(1))[0]

? ? # 讀取一個(gè)字符串,解析成一個(gè)定長(zhǎng)字符串(10個(gè)字符)
? ? string_value = struct.unpack("<5s", f.read(5))[0].decode("utf-8")

? ? # 讀取一個(gè)字節(jié)數(shù)組,解析成一個(gè)定長(zhǎng)字節(jié)數(shù)組(20個(gè)字節(jié))
? ? byte_array_value = struct.unpack("<20s", f.read(20))[0]

? ? # 打印結(jié)果
? ? 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格式進(jìn)行編碼,一般用在中文字符串前面,防止因?yàn)樵创a儲(chǔ)存格式問(wèn)題,導(dǎo)致再次使用時(shí)出現(xiàn)亂碼。

str= u'hello'

5.2. 字符串前加r

去掉反斜杠的轉(zhuǎn)移機(jī)制。(特殊字符:即那些,反斜杠加上對(duì)應(yīng)字母,表示對(duì)應(yīng)的特殊含義的,比如最常見(jiàn)的”\n”表示換行,”\t”表示Tab等。 )

str= r'hello\n\t\n'

5.3. 字符串前加b

表示該字符串是bytes 類(lèi)型。

bytes = b'hello'

在 Python3 中,bytes 和 str 的互相轉(zhuǎn)換方式是

str.encode(‘utf-8')
bytes.decode(‘utf-8')

5.4. 字符串前加f

以 f 開(kāi)頭表示在字符串內(nèi)支持大括號(hào)內(nèi)的python 表達(dá)式,字符串拼接

name = 'Lily'
print(f'My name is {name}.')

參考
[1] python3中的struct模塊使用
[2] Python 字符串前面加u,r,b,f的含義

到此這篇關(guān)于Python讀寫(xiě)二進(jìn)制文件的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python讀寫(xiě)二進(jìn)制文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中列表和元組的使用方法和區(qū)別詳解

    Python中列表和元組的使用方法和區(qū)別詳解

    這篇文章主要介紹了Python中列表和元組的使用方法和區(qū)別詳解的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • python?生成唯一id的四種方式

    python?生成唯一id的四種方式

    本文主要介紹了python?生成唯一id的四種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python常用的正則表達(dá)式大全

    python常用的正則表達(dá)式大全

    正則表達(dá)式是一個(gè)特殊的字符序列,它能幫助你方便的檢查一個(gè)字符串是否與某種模式匹配,下面這篇文章主要給大家介紹了關(guān)于python常用正則表達(dá)式的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • python暢玩os模塊以及順便批量修改圖片尺寸

    python暢玩os模塊以及順便批量修改圖片尺寸

    這篇文章主要介紹了python暢玩os模塊以及順便批量修改圖片尺寸方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python使用Appium在移動(dòng)端抓取微博數(shù)據(jù)的實(shí)現(xiàn)

    Python使用Appium在移動(dòng)端抓取微博數(shù)據(jù)的實(shí)現(xiàn)

    Appium是移動(dòng)端的自動(dòng)化測(cè)試工具,讀者可以類(lèi)比為PC端的selenium。通過(guò)它,我們可以驅(qū)動(dòng)App完成自動(dòng)化的一系列操作,同樣也可以爬取需要的內(nèi)容,本文就來(lái)介紹一下如何在移動(dòng)端抓取微博數(shù)據(jù),感興趣的可以了解一下
    2021-08-08
  • PyCharm插件開(kāi)發(fā)實(shí)踐之PyGetterAndSetter詳解

    PyCharm插件開(kāi)發(fā)實(shí)踐之PyGetterAndSetter詳解

    這篇文章主要介紹了PyCharm插件開(kāi)發(fā)實(shí)踐-PyGetterAndSetter,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • Django中Aggregation聚合的基本使用方法

    Django中Aggregation聚合的基本使用方法

    這篇文章主要給大家介紹了關(guān)于Django中Aggregation聚合的基本使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • python字典如何獲取最大和最小value對(duì)應(yīng)的key

    python字典如何獲取最大和最小value對(duì)應(yīng)的key

    這篇文章主要介紹了python字典如何獲取最大和最小value對(duì)應(yīng)的key問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • python如何讀取指定csv單元格

    python如何讀取指定csv單元格

    這篇文章主要介紹了python如何讀取指定csv單元格方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • TensorFlow實(shí)現(xiàn)模型斷點(diǎn)訓(xùn)練,checkpoint模型載入方式

    TensorFlow實(shí)現(xiàn)模型斷點(diǎn)訓(xùn)練,checkpoint模型載入方式

    這篇文章主要介紹了TensorFlow實(shí)現(xiàn)模型斷點(diǎn)訓(xùn)練,checkpoint模型載入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05

最新評(píng)論