Страница 1 из 1
Список атрибутов
Добавлено: 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.).
Подскажите, пожалуйста, как правильно прописать команды для получения списка атрибутов открытой таблицы.
Re: Список атрибутов
Добавлено: 25 мар 2024, 14:34
Владимир В
Решение найдено. Надо было прописать как свойство: attributes = table.schema.
Re: Список атрибутов
Добавлено: 26 мар 2024, 09:50
Матвеич
Доброго времени суток !
Владимир , я на те же грабли наступил относительно атрибутов. Вы помогли с этой проблемой.
P.S.
Это в руководстве :
Схему таблицы можно получить, используя свойство schema.
Например:
schema = table.schema()
Ох и дурят нашего брата .... Бамбарбия ,кергуду.
Re: Список атрибутов
Добавлено: 26 мар 2024, 11:57
Александр
Матвеич писал(а): ↑26 мар 2024, 09:50
Например:
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