問題描述
有一些二進制數據,每八位按順序存為一個十進制數保存成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)