注意: tofile方法写入,fromfile方法读出。特点:二进制读写,不保存数组的形状和元素类型等信息。
读出的时候需要指定dtype和对读出的数组进行修改shape操作
# coding: utf-8
import numpy as np
a=np.arange(0,12)
a.shape=3,-1
a.tofile("000003.bin")# 保存数据。
print(a)
b=np.fromfile("000003.bin",dtype=np.int32)#读出的时候,需要指定类型,否则会出错
#注意这时候的b还是一维的。
print(b.shape)
b.shape=3,-1
print(b)
注意:load 和save方法,是numpy专用的方法,用来保留二进制格式的数据。
相对于tofile和fromfile ,它会自动的处理元素类型和shape
# coding: utf-8
import numpy as np
a=np.arange(0,12)
a.shape=3,-1
a.tofile("000003.bin")# 保存数据。
print(a)
b=np.fromfile("000003.bin",dtype=np.int32)#读出的时候,需要指定类型,否则会出错
#注意这时候的b还是一维的。
print(b.shape)
b.shape=3,-1
print(b)
np.save("saved_b.npy",b) #参考上面的代码
c=np.load("saved_b.npy")
print(c)
如果要保存多个对象,则用savez,
其读出顺序为arr_0 arr_1 arr_2 …
np.savez("saved_all.npz",a,b,c)#写入多个对象
#读取多个对象
d=np.load("saved_all.npz")
print(d["arr_0"])
print(d["arr_1"])
print(d["arr_2"])
注意:用savetxt() 和loadtxt() 读写一维或者二维数组的文本文件,通常用来读写csv格式的文本
默认用空格分隔
# coding: utf-8
import numpy as np
a=np.arange(0,12)
a.shape=3,-1
a.tofile("000003.bin")# 保存数据。
print(a)
b=np.fromfile("000003.bin",dtype=np.int32)#读出的时候,需要指定类型,否则会出错
#注意这时候的b还是一维的。
print(b.shape)
b.shape=3,-1
print(b)
np.save("saved_b.npy",b) #参考上面的代码
c=np.load("saved_b.npy")
print(c)
np.savetxt("a.txt",a)
e=np.loadtxt("a.txt")
print("默认:")
print(e)
np.savetxt("b.txt",b,fmt="%d",delimiter=",")#可以指定用整数的格式存储,用逗号分隔。
f=np.loadtxt("b.txt",delimiter=",")
print("指定:")
print(f)
注意:针对首行或者首列不是数据的文件读取,通常采用:将文件读取为字符串数组,然后取出需要的部分,转为数值数组。
如: 文本文件test.csv 为
姓名,年龄,体重
张三,20,120
李四,23,110
temp=np.loadtxt("test.csv",dtype=np.str,delimiter=",")
data=temp[1:,1:].astype(np.float)
print data
如果只是首行不是数据,而其它都是标准格式的数据,那么也可以只需要先读取一行,然后再将文件传给loadtxt()
g=open("test.csv")
g.readline()
data=np.loadtxt(g,dtype=np.str,delimiter=",")
print data
**注意:该模块下的python-pcl 在windows下也可以运行。
打开的pcd
文件 格式为bianary
windows下python-pcl模块安装教程,请参考:
https://blog.csdn.net/m0_37863723/article/details/81487888
最后,推荐使用Ubuntu系统,安装好pcl之后,直接使用pip安装就行
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import pcl
filename = './1542614507.194016000'
p = pcl.load(filename + '.pcd')#读取pcd文件
#写入文件
f = open(filename + '.txt', 'w')
f.write("写入" + str(p.size) + "个数据点" + '\n')
for i in range(p.size):
f.write(str(p[i][0]) + '\t' + str(p[i][1]) + '\t' + str(p[i][2]) + '\n')
f.write("-------end of file-------")
f.close()
当然,安装不了python-pcl也没有太大问题,可以使用传统方法,代码如下:
打开的pcd
文件 格式为ascii
import os
#定义一个三维点类
class Point(object):
def __init__(self,x,y,z):
self.x = x
self.y = y
self.z = z
points = []
filename = '/home/gcc/***'
#读取pcd文件,从pcd的第12行开始是三维点
with open(filename+'.pcd') as f:
for line in f.readlines()[11:len(f.readlines())-1]:
strs = line.split(' ')
points.append(Point(strs[0],strs[1],strs[2].strip()))
##strip()是用来去除换行符
##把三维点写入txt文件
fw = open(filename+'.txt','w')
for i in range(len(points)):
linev = points[i].x+" "+points[i].y+" "+points[i].z+"\n"
fw.writelines(linev)
fw.close()