亚洲综合视频在线_国产亚洲欧洲一区高清在线观看_欧美日韩成人综合_国产精品99久久久久久白浆小说_美女在线一区二区_欧美性xxxxx极品_国内偷自视频区视频综合_亚洲色图18p_亚洲视频一二三区_国产日韩欧美中文

【全球新視野】Python工具箱系列(三十七)

2023-06-26 11:31:44 來源:博客園

打印 放大 縮小

二進制文件操作(上)

python比較擅長與文本相關的操作。但現實世界中,對于非文本消息的處理也很普遍。例如:


(資料圖片僅供參考)

◆通過有線、無線傳遞傳感器獲得的測量數據。

◆衛星通過電磁波發送測量數據。

◆數據中心的數萬臺服務器發送當前CPU的占用率信息、內存占用量等眾多指標數據。

以上數據,當然可以以文本方式發送,但是對于帶寬的占用驚人。假設某個對于PM2.5進行測量的傳感器,每隔一秒發送一次測量數據,以文本方式發送消息,內容如下:

"counter: 1, pm25: 170.24119426834042, timestamp: 2022-07-24 08:52:11.138894+00:00"

以上消息占用了81個字節。而如果能夠按照約定的格式直接發送二進制數據,則只需要20個字節,可以大幅提升傳輸效率。此外,以文本方式在本地保存傳感器數據,則一天就需要81*86400/1024=6834M字節,對于傳感器這種體積小巧的嵌入式系統,存儲空間極為有限,很快就會空間耗盡。因此,對非文本數據直接保存與讀取非常有必要。下面的代碼演示了傳感器類,以及傳感器測量數據的二進制文件存儲與讀取的基本操作。

import binasciiimport randomimport structfrom datetime import datetimefrom io import BytesIOfrom time import sleepimport arrowclass sensordata_v1():    def __init__(self):        utc = arrow.utcnow()        self._timestamp = utc.to("Asia/Shanghai")    @property    def counter(self) -> int:        """        計數器        Returns:            int: 從0開始的計數器        """        return self._counter    @counter.setter    def counter(self, value: int):        self._counter = value    @property    def pm25(self) -> float:        """        PM25測量值        Returns:            float: pm25的當前測量值        """        return self._pm25    @pm25.setter    def pm25(self, value: float):        self._pm25 = value    @property    def timestamp(self) -> datetime:        """        當前時點        Returns:            datetime: 當前的時間        """        return self._timestamp.datetime    def __str__(self):        """        以文字輸出相關內容        Returns:            string: 說明性文字        """        return f"counter: {self.counter}, pm25: {self.pm25}, timestamp: {self.timestamp}"    def __repr__(self):        """        輸出字節流的16進制內容        Returns:            string: 16進制顯示相關數值        """        return str(binascii.hexlify(self.toBytes()))    def toBytes(self):        """        將相關數據轉換成為bytes,便于網絡傳輸或者寫入文件        Returns:            bytes: 整合測量數據到字節流中        """        with BytesIO() as byio:            byio.write(struct.pack("

其中arrow是非常值得推薦的時間處理框架。python有內置的時間處理框架,功能非常完善,但失之于亂與雜,掌握起來非常不易。而arrow則非常人性化,做到了拿來即用。其安裝過程非常簡單,直接pip install arrow即可。在示例程序中,為了能夠方便存儲,我們將時間戳直接用UNIX的timestamp來表示,轉換后為了保持精度,本例使用double(8字節)存儲,如果要求不高,可以改為float(4字節)。

sensordata_v1類使用@property裝飾器來定義屬性。總共有3個屬性:

◆counter-計數器。從0開始計數累加,后續保存到數據庫中時也方便檢索。

◆pm25-PM2.5測量值。在示例代碼中使用random.uniform模擬一個0到300的隨機浮點值,沒有什么太大的意義,保證每次不同即可。

◆timestamp-數據采集時的對應時間。

str類函數

可以自定義,本例中用它來直觀的表示當前的采集值。當對sensordata_v1類的實例打印時,就會自動調用這個函數。

repr類函數

可以自定義,本例中用它來演示轉換成為字節流bytes時的16進制值。對于程序員來說,16進制來表示字節是比較自然的。

toBytes類函數具體展示了如何將類的屬性值轉換成為二進制字節流,主要依靠python內置的struct模塊。在內存中模擬文件打開一個BytesIO,并且依次寫入struct.pack編碼后的字節流,最終統一輸出。

fromBytes類函數具體展示了如何從字節流反解成為對象的屬性值。struct.pack與struct.unpack成對出現。

toFile函數將編碼好的字節流寫入二進制文件。寫入的模式為"wb",其中w代表全覆蓋寫入的意思,b代表二進制模式的意思。fromFile負責從二進制文件讀回保存的字節流,重新生成各個sensordata_v1對象。

生成的二進制文件,可以使用UltraEditor、InHex等。也可以直接使用vscode自帶的2進制文件瀏覽器擴展Hex Editor,顯示效果如下圖所示:

從圖中可以看出,二進制文件確實節省空間,但人類不容易理解,必然借助于專用工具與代碼來管理。但即使計算機與網絡能力強悍如斯,二進制文件與網絡上的字節流仍然必不可少,不可替代。

關鍵詞:

責任編輯:ERM523

相關閱讀

亚洲综合视频在线_国产亚洲欧洲一区高清在线观看_欧美日韩成人综合_国产精品99久久久久久白浆小说_美女在线一区二区_欧美性xxxxx极品_国内偷自视频区视频综合_亚洲色图18p_亚洲视频一二三区_国产日韩欧美中文
国产精品一线二线三线精华| 国产精品你懂的在线欣赏| 精品一区二区在线播放| 亚洲综合久久久| 91小宝寻花一区二区三区| 精品乱码亚洲一区二区不卡| 国产成人在线影院 | 爽好多水快深点欧美视频| 国产成人a级片| 91精品国产综合久久久久久久久久 | 高清beeg欧美| 色婷婷久久久综合中文字幕| 亚洲精品一线二线三线无人区| 精品少妇一区二区三区在线视频 | 日韩av电影免费观看高清完整版 | 91精品蜜臀在线一区尤物| 激情欧美一区二区| 亚洲女与黑人做爰| 欧美色倩网站大全免费| 日本亚洲天堂网| 国产精品美女久久久久av爽李琼 | 欧美精品电影在线播放| 国产精品系列在线观看| 日韩在线卡一卡二| 一区在线观看免费| 日韩欧美一区二区久久婷婷| 日韩精品电影在线观看| 久久精品国产久精国产爱| 亚洲一区二区三区中文字幕 | 亚洲综合丁香婷婷六月香| 色哟哟一区二区三区| 国产亚洲美州欧州综合国| 亚洲国产精品自拍| 91.麻豆视频| 欧美福利视频导航| 91小视频免费观看| av一区二区三区黑人| 午夜精品久久久久久久| 欧美电视剧在线观看完整版| 琪琪久久久久日韩精品| 日韩理论电影院| 日韩网站在线看片你懂的| 日韩在线一区二区| 久久99日本精品| 麻豆高清免费国产一区| 国产欧美日本一区视频| 欧美最猛性xxxxx直播| 国产成人午夜片在线观看高清观看| 日韩精品视频网站| 在线成人免费观看| 99精品久久免费看蜜臀剧情介绍| 在线成人免费观看| 亚洲综合精品久久| 国v精品久久久网| 99久久婷婷国产| 欧美精品黑人性xxxx| av资源站一区| 成人综合激情网| 久久久久久黄色| 亚洲一区二区三区在线| 久久丁香综合五月国产三级网站| 懂色av中文一区二区三区| 成人av在线电影| 色视频一区二区| 精品国产伦一区二区三区观看体验| 中文天堂在线一区| av激情综合网| 亚洲va欧美va人人爽| 色婷婷亚洲一区二区三区| 日韩欧美一级精品久久| 欧美大片在线观看一区二区| 国产成人综合在线| 色综合天天综合| 欧美日韩一区高清| 欧美亚洲综合久久| 一区二区三区高清在线| 亚洲18女电影在线观看| 免费精品视频在线| 欧美在线不卡视频| 欧美丰满嫩嫩电影| 久久综合九色综合97婷婷| 国产一区在线观看视频| 欧美成人bangbros| 狠狠狠色丁香婷婷综合久久五月| 成人午夜视频在线观看| 欧美日韩精品免费| 久久久综合九色合综国产精品| 26uuu精品一区二区| 成人av动漫网站| 日韩精品午夜视频| 专区另类欧美日韩| 欧美体内she精高潮| 中文字幕中文在线不卡住| 国产在线观看一区二区| 日韩一区二区三区免费看 | 中文字幕精品综合| 欧美在线短视频| 国产99久久久国产精品潘金网站| 国产精品一卡二| 亚洲国产欧美一区二区三区丁香婷| 色成年激情久久综合| 国产成人高清在线| 一区二区三区日韩精品| 欧美肥大bbwbbw高潮| 亚洲不卡av一区二区三区| 国产日韩欧美综合在线| 在线播放中文一区| 蜜桃视频在线一区| 午夜精品福利一区二区三区蜜桃| 日韩西西人体444www| 欧美人动与zoxxxx乱| 精品久久一区二区| 7777精品伊人久久久大香线蕉 | 韩国成人福利片在线播放| 综合网在线视频| 国产偷国产偷亚洲高清人白洁| 欧美成人a在线| 日韩视频一区二区三区| 色综合久久中文综合久久97| 另类小说视频一区二区| 一区二区三区四区蜜桃 | 国产精品免费视频观看| 欧美人xxxx| 欧美日韩国产不卡| 日本高清不卡在线观看| 色婷婷久久综合| 欧美日韩高清在线| 日韩精品综合一本久道在线视频| 欧美曰成人黄网| 国产精品色哟哟| 麻豆成人免费电影| 91麻豆精品国产91久久久资源速度| 国产精品美女久久久久久久久久久| 国产精品亚洲一区二区三区妖精 | 国产精品久久久久影院亚瑟| 欧美日韩国产片| 夜夜操天天操亚洲| 九九热在线视频观看这里只有精品| 成人动漫一区二区三区| 久久在线免费观看| 久久综合综合久久综合| 欧美偷拍一区二区| 亚洲欧美二区三区| 在线观看日韩毛片| 五月婷婷色综合| 91精品欧美久久久久久动漫| 欧美α欧美αv大片| 奇米精品一区二区三区在线观看| 久久嫩草精品久久久久| 亚洲人精品午夜| 亚洲欧美成人一区二区三区| 亚洲一二三区在线观看| 韩国成人福利片在线播放| 成人av在线网站| 欧美成人精品1314www| 午夜精品视频一区| 亚洲成av人片一区二区梦乃| 亚洲第一电影网| 在线欧美日韩精品| 91精品国产欧美一区二区18| 综合久久久久久| av网站免费线看精品| 亚洲欧洲性图库| 丁香天五香天堂综合| 欧美性大战xxxxx久久久| 亚洲色图19p| 久久99久久99精品免视看婷婷 | 国产综合色视频| 精品久久久久一区| 国产**成人网毛片九色| 欧美日韩激情一区| 亚洲乱码国产乱码精品精可以看| 日韩中文字幕91| 欧美日韩一区二区三区四区| 欧美一级黄色片| 亚洲综合色在线| 欧美mv和日韩mv的网站| 99国产精品久久久久久久久久| 亚洲国产精品一区二区久久恐怖片 | 欧美日韩成人在线| 成人永久aaa| 日韩激情一二三区| 久久久国产精品午夜一区ai换脸| 99re66热这里只有精品3直播| 亚洲小少妇裸体bbw| 欧美精品视频www在线观看| 国产精品自在在线| 麻豆精品一区二区三区| 亚洲午夜久久久久久久久电影院 | 欧美影片第一页| 热久久免费视频| 综合激情网...| 国内精品在线播放| 婷婷中文字幕一区三区| 欧美国产一区二区| 久久先锋影音av| 久久伊99综合婷婷久久伊| 久久精品人人做人人综合| 777久久久精品| 2021国产精品久久精品|