一、概述
wrl :virtual reality world
最近在找一些大场景点云文件,找到了一些 .wrl 文件,但是这些文件需要专门的软件打开才能显示,而我一般用的都是meshlab,所以需要转成 .ply 文件。所以就用Python将指定目录下的所有 wrl 文件一次性转成 ply 文件,并存储到另一个指定目录下。
二、代码
代码中 wrl 就是需要被转的wrl文件所在目录,ply 就是转为ply文件后所要存储的目录,根据实际情况自己确定。
import os
path = "E:/QTProgram/Master Career/Project---featureExt/major revision/new models/original/wrl/"
files = os.listdir(path)
print(files)
print('-----------------------')
for filename in files:
filename = filename.split('.')[0]
wrl = "E:/QTProgram/Master Career/Project---featureExt/major revision/new models/original/wrl/" + filename + ".wrl"
ply = "E:/QTProgram/Master Career/Project---featureExt/major revision/new models/original/ply/" + filename +".ply"
with open(wrl, 'r') as f2:
str = f2.readline()
while str:
if(str.strip().split(' ')[0]=='numPoints'):
print(str.strip().split(' ')[-1])
pointsNum = str.strip().split(' ')[-1]
break
str = f2.readline()
with open(ply, 'w') as f1:
f1.write(
"""ply
format ascii 1.0
comment VCGLIB generated
element vertex {}
property float x
property float y
property float z
element face 0
property list uchar int vertex_indices
end_header
""".format(pointsNum)
)
with open(ply, 'a') as f1:
with open(wrl, 'r') as f:
str = f.readline()
while str:
if(str.strip() == 'point ['):
print(str)
break
str = f.readline()
str = f.readline()
while str:
if str.strip().split(' ')[-1]==']':
print('***')
f1.write(str.strip().strip(']'))
break
str = str.strip().strip(',');
f1.write(str + '\n')
str = f.readline()
f.close()
f1.close()
三、结果
我将转化得到的20个ply文件合并后得到如下结果: