Я пытаюсь записать некоторые данные точки xyz в файл .ply, используя python.
Я использую этот скрипт, который в основном пишет панд DataFrame в двоичный формат с помощью метода recarry и numpy tobytes()
:
import pandas as pd
import numpy as np
pc = pd.read_csv('points.txt')
with open('some_file.ply', 'w') as ply:
ply.write("ply\n")
ply.write('format binary_little_endian 1.0\n')
ply.write("comment Author: Phil Wilkes\n")
ply.write("obj_info generated with pcd2ply.py\n")
ply.write("element vertex {}\n".format(len(pc)))
ply.write("property float x\n")
ply.write("property float y\n")
ply.write("property float z\n")
ply.write("end_header\n")
pc[['x', 'y', 'z']] = pc[['x', 'y', 'z']].astype('f4')
ply.write(pc[['x', 'y', 'z']].to_records(index=False).tobytes())
Этот сценарий отлично работает на моем Mac, и такое программное обеспечение, как CloudCompare, может его прочитать; однако, когда я использую тот же сценарий на компьютере с Windows, CloudCompare может читать информацию заголовка, но упаковывает двоичное содержимое.
Когда я читаю версию текстового файла в CloudCompare и вывожу в виде двоичного файла, версии для Linux и Windows могут его читать, но содержимое файла отличается.
Вот версия, созданная вышеуказанным скриптом, здесь — версия, созданная CloudCompare для Windows, и здесь — необработанные данные.
pc
каким-то пользовательским типом, который тайно манипулирует значениями индекса? - person artdanil   schedule 03.10.2019pc
— это DataFrame pandas, список индексирует столбцы вpc
. - person kungphil   schedule 03.10.2019