问题描述

有一些二进制数据,每八位按顺序存为一个十进制数保存成CSV文件,每行为一个二进数数据,每个单元格均为一个十进制数。若数据为0000 0001 1000 0000,在CSV的一行中则存为1,128\n
现发现存储错位,需要将每个数据整体向左移位2位并保存成以上描述的格式

解决方法

  • 将每个行数据读出并将每个十进制转换为8位二进制数的字符串(同时使用切片去除开头的二进制数标识)
  • 将字符串整体连接起来,切去开头两个0并在结尾连接一个00
  • 重新将字符串切片,并转换

    实验代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 读取数据
    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))

    最终代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    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)