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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值