Установить диапазон допустимых типов данных / приведение типов для значений из файла в Python

1

Я читаю файл в строке за строкой. Строки разделены символом "|". Поскольку значения интерпретируются как строка после того, как они были прочитаны из файла, я хочу отнести их к их правильному представлению (теперь я являюсь типом данных каждого значения столбца).

Таким образом, я написал небольшой метод "translate", который выглядит следующим образом:

def translateType(self, dataType):
    if dataType == "INTEGER":
       return int
    elif dataType == "FLOAT":
       return float
    elif dataType == "STRING":
       return str

Я думаю, что это не действительно удовлетворительное решение, потому что этот код как-то не очень уродлив и получает боль, когда есть больше типов данных, которые нужно поддерживать.

Есть ли у вас какие-либо идеи о том, как сделать этот тип "настройки типа" как-то лучше и более расширяемым?

Теги:
dynamic
casting
types

2 ответа

2

Используйте словарь, например

def translateType(t):
    return {"INTEGER": int, "FLOAT": float, "STRING": str}.get(t, None)

Или, если производительность является обязательной (сначала профиль), определите dict в списке аргументов, поэтому его не нужно создавать каждый раз, когда вызывается функция:

def translateType(t, types={"INTEGER": int, "FLOAT": float, "STRING": str}):
    return types.get(t, None)
  • 0
    Ударь меня к этому. :) Хотя, диктаторский?
  • 0
    Да - думал об этом ...
Показать ещё 3 комментария
0

Вместо строк просто используйте список типов полей напрямую:

>>> line = 'white fang|jack london|1888|7.50'
>>> types = [str, str, int, float]
>>> [t(s) for t, s in zip(types, line.split('|'))]
['white fang', 'jack london', 1888, 7.5]
  • 0
    Привет - да, хорошая идея ... но информация о типе полей на самом деле приходит из самого файла (вторая строка). Таким образом, я не знаю это во время "компиляции"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню