问题描述
有一些二进制数据,每八位按顺序存为一个十进制数保存成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
26class 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)