Python解決大規模二進制數據錯位

問題描述

有一些二進制數據,每八位按順序存為一個十進制數保存成CSV文件,每行為一個二進數數據,每個單元格均為一個十進制數。若數據為0000 0001 1000 0000,在CSV的一行中則存為1,128\n
現發現存儲錯位,需要將每個數據整體向左移位2位并保存成以上描述的格式

解決方法

  • 將每個行數據讀出并將每個十進制轉換為8位二進制數的字符串(同時使用切片去除開頭的二進制數標識)
  • 將字符串整體連接起來,切去開頭兩個0并在結尾連接一個00
  • 重新將字符串切片,并轉換

實驗代碼

#讀取數據
 with open("./ramdata_brockenline.csv") as file_point:
     content_list = [x.split(",") for x in file_point.read().split("\n")]

 input_data = []
 for content in content_list[:-1]:
     #轉換為字符串并進行移位
     int_list = "".join([bin(int(x))[2:].zfill(8)
                         for x in content[1:]])[2:] + "00"
     #切片
     bin_list = [int(int_list[i: i + 8], 2) for i in range(0, len(int_list), 8)]
     input_data.append([content[0], bin_list])
 
 #打印出結果
 for x in input_data:
     print(x)
 print(len(input_data))

最終代碼

class InputCSVHandle(object):
    """docstring for InputCSVHandle"""

    def __init__(self, FilePath):
        super(InputCSVHandle, self).__init__()
        self.FilePath = FilePath
        self.InputData = self.InputHanlde(self.CSVReader())

    def CSVReader(self):
        with open(self.FilePath, "r") as file_point:
            return [x.split(",")
                    for x in file_point.read().split("\n")]

    def InputHanlde(self, content_list):
        input_data = []
        for content in content_list[:-1]:
            int_list = "".join([bin(int(x))[2:].zfill(8)
                                for x in content[1:]])[2:] + "00"
            bin_list = [int(int_list[i: i + 8], 2)
                        for i in range(0, len(int_list), 8)]
            input_data.append([content[0], bin_list])
        return input_data

if __name__ == '__main__':
    test = InputCSVHandle("./ramdata_brockenline.csv")
    print(test.InputData)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 網站亂碼問題我們會經常碰到,大多見于非英文的中文字符或其他字符亂碼,而且,這類問題常常是因為編碼方式問題,主要原因...
    波段頂底閱讀 2,984評論 1 9
  • 1 關鍵字 1.1 關鍵字的概述 Java的關鍵字對java的編譯器有特殊的意義,他們用來表示一種數據類型,或...
    哈哈哎呦喂閱讀 673評論 0 0
  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,176評論 6 13
  • ch3 基本概念 標簽(空格分隔): JavaScript 語法 標識符 第一個字符必須是字母、下劃線或美元 駝峰...
    大臉菌閱讀 572評論 0 0
  • 如果多年以后我有了自己的孩子,我希望我能擁有兩個孩子,如果我足夠幸運的話,我希望是一個哥哥,一個妹妹,讓兒子從小就...
    李源很明白閱讀 340評論 0 2