python學習隨筆5

2021-09-26 13:16:43 字數 1484 閱讀 1499

上周末處理一些資料,二進位制資料以txt檔案形式存放。資料格式為:0b***x。實則該二進位制資料**於16進製制資料。通過bin(int(xx,16))方式進行轉換,理論上完成了有16進製製到2進製的轉換。然而,該方式存在乙個致命的缺點,那就是資料位丟了。下面我們就來闡述如何解決這個問題。

值得說明的是,這裡的資料位丟失並非在轉換過程**現錯誤。文字表達起來總會缺點什麼,我們來舉個栗子吧,(p.s我大學時候給同學講題的口頭禪,哈哈哈)。比如說,ox51–>0b101_0001,說明一下這裡的下劃線是為了看得清楚而加。顯然我們看出來16進製制的『5』在轉化為2進製時只顯示三位,應該是轉化為四位呀,應該是0b0101。那麼還有一位零**去了呢?我姑且稱之為資料位的丟了。不是我較真,這個零不見了有時候是很致命的,特別是在使用python處理資料時。你說前面10k的資料都對的整整齊齊,突然在第10001時發現資料『凹』了,之後的資料又是對的整整齊齊。這可怎麼玩,沒得玩呀,用python處理的資料就會出現錯誤,這就尷尬呀。

前面說到了資料位丟,導致的『尷尬』。那麼接下來就談一談,如何解決這個問題。大腿一拍,補不就完事了嗎?不無道理,可是怎麼補,手工補嗎?當然不是,肯定是讓電腦去補呀。是的,出現缺位那麼補資料肯定是正確的思路,還有乙個思路就是自己編寫乙個轉換函式。說到轉換函式,解釋一下bin(int(xx,16))的含義吧。首先,對整個表示式進行拆分,拆分為兩部份,1、bin(), 2、int()。其次,說一說bin(),bin()實則為將10進製數轉化為2進製數。再者,談一談int(),int(xx,16)表示將xx數轉換10進製數。xx為16進製制數,所以才有int(xx,16)中16的說法。好了到這裡我們提出了兩種解決資料位缺失的問題,下面就採用第一種方法——補位。

具體做法為,這裡採用2位16進製制數轉換為8位2進製數為例進行說明:採用bin(int(xx,16))將16進製制數轉換為2進製數,例如bina = bin(int(num,16)) —> 計算出bina的長度,如:length_bina = len(bina)—> 令width = 10,為什麼是10 ,不是8嗎?這裡考慮了0b,因此width = 2 + 8,我們最後得出的結構應該是:0b***x_***x。length_comp = width - length_bina,通過length_comp我們就可以知道到底該補幾個零。 —>bina_new = bina[:2] + length_comp * 『0』 + bina[2:]最後得到bina_new便是補位(補零)之後的結果。其中bina[:2] 代表 0b,為什麼?這不就是字元創的索引(index)嘛。

好了,補零完成了,所有資料都一般長了。貼出部分**,此**是實現從乙個存有16進製制的檔案,擷取其中的2位16進製制數。最後將補零後的結果寫入檔案。

python學習隨筆5

關聯式資料庫程式設計 資料定義語言 ddl creat drop 資料控制語言 dcl 資料訪問和許可權grant revoke 資料查詢語言 dql select查詢 資料操作語言 dml 增 刪 改insert delete update 事物處理語言 tpl 保證資料一致性commit rol...

Mysql學習隨筆 5

1.主鍵 不能重複 不能為空 索引 一張表只能有乙個主鍵 乙個主鍵可以是多列 2.外來鍵 約束不重複 可以為空 節省空間 加速查詢 3.外來鍵例項 create table t5 nid int 11 not null auto increment,pid int 11 not null,num i...

python學習隨筆

初始學習 菜雞乙個 1 用python提取excel資料 data pd.read excel r c users limaoli desktop ybsj.xlsx 這加了乙個r data np.array data 把列表轉換為陣列,方便後面的提取 datamat data 0 3 這個提取的是...