我正在尝试编写一个简短的脚本来将包含点坐标的文本文件转换为二进制层文件。想法是在开头添加一个标题,将文件类型更改为 ASCII ply,然后使用 plyfile 读取它并写入二进制 ply。我会使用 CloudCompare 或 Meshlab 手动执行此操作,但我有几千个文件要转换。
我找到了一个可以使用 CloudCompare 打开的 ASCII 层文件,但是当我尝试使用 PlyData.read 时出现 AttributeError。当我尝试在直接从 CloudCompare 保存的文件上运行它时,我得到了同样的错误。
这是我将代码简化为用于调试的内容:
import os
from glob import glob
from plyfile import PlyData, PlyElement
if __name__ == '__main__':
#Request input if no system arguments found
try:
inputDirName = sys.argv[1]
except IndexError:
inputDirName = input('Enter directory containing ASCII ply files:\n')
os.chdir(inputDirName)
files = glob('*.ply')
for file in files:
with open(file, 'r+') as f:
data = PlyData.read(f)
PlyData([data]).write(file.split('.')[0] + '_binary.ply')
这是我运行它时遇到的错误
File "C:\Users\user\Miniconda3\lib\site-packages\plyfile.py", line 392, in read
data = PlyData._parse_header(stream)
File "C:\Users\user\Miniconda3\lib\site-packages\plyfile.py", line 373, in _parse_header
while parser.consume(stream.readline()):
File "C:\Users\user\Miniconda3\lib\site-packages\plyfile.py", line 120, in consume
line = raw_line.decode('ascii').strip()
AttributeError: 'str' object has no attribute 'decode'