import math#
import pickle#导入pickle库
#读取txt文件中的数据并对其进行数据转换和部分数据合并
def Data_Convert(filename):
file = open(filename,'r')#打开文件
line_data = file.readlines()#读取所有行
New_Data = []
for line in line_data:
temp_list = line.split(' ')
temp_list[-1] = temp_list[-1].replace('\n','')
temp_list = [i for i in temp_list if i !='']#列表推导式去除空字符串
temp_list.pop(0)
#print(temp_list)
New_Data.append(temp_list)
New_Data.pop(0)
#print(New_Data[0])
for i in range(0,len(New_Data)):
for j in range(len(New_Data[i])):
New_Data[i][j] = float(New_Data[i][j])
#实现拼接具有相同头元素的数组
demo = [] #头元素目录
new_ = [] #拼接后新数组
for i in range(0, len(New_Data)):
if New_Data[i][0] not in demo:
demo.append(New_Data[i][0])
new_.append(New_Data[i])
else:
for m in range(0, len(demo)):
if demo[m] == New_Data[i][0]:
for j in range(1,len(New_Data[i])):
new_[m].append(New_Data[i][j])
return new_
#数据存储函数,将二维列表存入txt文件中
def data_save(filename,data):
f = open(filename, 'w+')
for i in range(len(data)):
jointsFrame = data[i] # 每行
for j in range(len(data[i])):
strNum = str(jointsFrame[j])
f.write(strNum)
f.write(' ')
f.write('\n')
print('保存成功!')
f.close()
def main():
data = Data_Convert('Vehicle_Data.txt')#读取txt文件数据
#print(data)
data_save('Vehicle_Tset_Data.txt',data)#保存数据到另一个txt文件
pickle.dump(data,open('Vehicle_Data.pkl','wb'))#将txt数据存入pickle文件中,这样下次读取仍然是列表格式,不需要再进行解析
data1 = pickle.load(open('Vehicle_Data.pkl','rb'))#加载pickle文件数据,数据格式是列表
if __name__ == "__main__":
main()
下图是“Vehicle_Data.txt”文件中的数据
第一列是行数,第二列是时间,第三列是车次,第四列是position_x坐标,第五列是position_y坐标,第六列是head角度
在这些数据里面我们可以看到有的同一时间点出现了两个车次甚至是两个以上车次的数据,需要将同一时间点的不同车次的数据进行合并,去掉同一时间点后面车次的时间列,保留车次列,position_x,position_y,head列,将其合并到第一次出现该时间的车次的数据后面
存入“Vehicle_Tset_Data.txt”文件中的数据如下图所示:
在这里采用pickle库的作用是为了读取方便,下次再次读取就不需要再进行繁琐的解析了
关于pickle的介绍在下面这个链接中:
https://www.cnblogs.com/shuaishuai-it/p/5407003.html