Установить диапазон допустимых типов данных / приведение типов для значений из файла в Python - PullRequest
1 голос
/ 03 ноября 2011

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

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

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 голосов
/ 03 ноября 2011

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

>>> 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]
...