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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 网站乱码问题我们会经常碰到,大多见于非英文的中文字符或其他字符乱码,而且,这类问题常常是因为编码方式问题,主要原因...
    波段顶底阅读 8,215评论 1 9
  • 1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或...
    哈哈哎呦喂阅读 3,911评论 0 0
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,850评论 6 13
  • ch3 基本概念 标签(空格分隔): JavaScript 语法 标识符 第一个字符必须是字母、下划线或美元 驼峰...
    大脸菌阅读 3,602评论 0 0
  • 如果多年以后我有了自己的孩子,我希望我能拥有两个孩子,如果我足够幸运的话,我希望是一个哥哥,一个妹妹,让儿子从小就...
    李源很明白阅读 2,642评论 0 2