Список атрибутов

Вопросы связанные с работой ГИС Аксиома
Ответить
Аватара пользователя
Владимир В
Сообщения: 10
Зарегистрирован: 25 мар 2024, 06:54

Список атрибутов

Сообщение Владимир В » 25 мар 2024, 13:31

Здравствуйте!
Версия ОС Windows 10
Версия ГИС Аксиома 5.2.1
Была поставлена задача - прочесть список атрибутов открытой таблицы.
Прописал команды:
path_to_file = open_file_dialog("MapInfo Tab (*.tab)")
table = provider_manager.openfile(str(path_to_file))
attributes = table.schema()

Получил исключение:
Unhandled Python Exception:
...
attributes = table.schema()
TypeError: 'Schema' object is not callable

В PyCharm метод schema() не отображается в списке после точки (table.).
Подскажите, пожалуйста, как правильно прописать команды для получения списка атрибутов открытой таблицы.
Аватара пользователя
Владимир В
Сообщения: 10
Зарегистрирован: 25 мар 2024, 06:54

Re: Список атрибутов

Сообщение Владимир В » 25 мар 2024, 14:34

Решение найдено. Надо было прописать как свойство: attributes = table.schema.
Аватара пользователя
Матвеич
Сообщения: 79
Зарегистрирован: 09 янв 2024, 11:43

Re: Список атрибутов

Сообщение Матвеич » 26 мар 2024, 09:50

Доброго времени суток !

Владимир , я на те же грабли наступил относительно атрибутов. Вы помогли с этой проблемой.

P.S.
Это в руководстве :
Схему таблицы можно получить, используя свойство schema.
Например:
schema = table.schema()

Ох и дурят нашего брата .... Бамбарбия ,кергуду.
Аватара пользователя
Александр
Сообщения: 433
Зарегистрирован: 18 апр 2019, 08:21

Re: Список атрибутов

Сообщение Александр » 26 мар 2024, 11:57

Матвеич писал(а): 26 мар 2024, 09:50 Например:
schema = table.schema()
Ошибку в документации исправили.
Конечно, должно быть:

Код: Выделить всё

schema = table.schema
Владимир В писал(а): 25 мар 2024, 13:31 В PyCharm метод schema() не отображается в списке после точки (table.).
Подскажите, пожалуйста, как правильно прописать команды для получения списка атрибутов открытой таблицы.
Метод provider_manager.openfile() возвращает объект типа DataObject.
У DataObject отсутствует свойство schema, поэтому PyChram не может его отобразить. Свойство schema есть у Table, который является наследником DataObject. Это не является проблемой и код будет работать.
Но если Вы хотите чтобы PyCharm мог отобразить соответствующее свойство, необходимо чтобы он корректно определил тип переменной.
Сделать это можно например так:

Code: Select all

import axipy as axp

path_to_file = axp.open_file_dialog("MapInfo Tab (*.tab)")
table = axp.provider_manager.openfile(str(path_to_file))
if isinstance(table, axp.Table):
# В этот момент PyCharm может определить тип переменной
attributes = table.schema
Также, можно открыть таблицу используя соответствующий провайдер. Метод TabDataProvider.open возвращает Table, а значит PyCharm сможет найти свойство.

Code: Select all

import axipy as axp

path_to_file = axp.open_file_dialog("MapInfo Tab (*.tab)")
table = axp.provider_manager.tab.open(str(path_to_file))
attributes = table.schema
Ответить