Определите новое измерение при написании файла laspy

Как я могу добавить данные в настраиваемое измерение при сохранении файла laspy (.las) в python?

Хорошо, подробнее: я прочитал стандартный файл.las с атрибутами X,Y,Z,I. Затем я выполняю некоторые вычисления и хочу сохранить результат в виде файла.las с атрибутами X, Y, Z, I и дополнительным новым измерением "my_dim". Пока я знаю имя нового измерения, я могу без проблем определить и добавить в него данные:

header = laspy.header.Header(point_format=2)
with laspy.file.File(FILEPATH, mode="w", header=header) as f:
    f.define_new_dimension(name="my_dim", data_type=5, description="My new dimension")
    f.my_dim = ...
    ...

Однако я хочу заключить процесс сохранения в отдельную функцию и указать дополнительные размеры в качестве параметра. extra_dims (как список диктовок, например [{"name": "my_dim", data_type: 5, ...}]. Теперь я все еще могу определить новое измерение на основе параметра, но добавить данные невозможно. Вот фрагмент:

def save(extra_dims):
    header = ...
    with laspy...:
        for dim in extra_dims:
            f.define_new_dimension(name = dim["name"], data_type = ...
        # Assign X,Y,Z,I
        ...

Для добавления данных f[dim["name"]] = ... не работает (тоже не работает f.dim["name"], очевидно), я получаю только

TypeError: 'File' object does not support item assignment

Кто-нибудь знает, как решить эту проблему, т.е. добавить данные в атрибут, имя которого "скрыто" в параметре?

1 ответ

Используйте встроенные в pyhton атрибуты setattr() и getattr():

    ...
    # Assign X,Y,Z,I
    setattr(f, dim["name"], your_data)
Другие вопросы по тегам