ポイント座標を含むテキスト ファイルをバイナリ ply ファイルに変換する短いスクリプトを作成しようとしています。ヘッダーを先頭に追加し、ファイル タイプを ASCII ply に変更してから、plyfile で読み取り、バイナリ ply に書き込むというアイデアでした。これは CloudCompare または Meshlab を使用して手動で行いますが、変換するファイルが数千あります。
CloudCompare で開くことができる ASCII ply ファイルがある場所にたどり着きましたが、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'