Я читаю файл в строке за строкой. Строки разделены символом "|". Поскольку значения интерпретируются как строка после того, как они были прочитаны из файла, я хочу отнести их к их правильному представлению (теперь я являюсь типом данных каждого значения столбца).
Таким образом, я написал небольшой метод "translate", который выглядит следующим образом:
def translateType(self, dataType):
if dataType == "INTEGER":
return int
elif dataType == "FLOAT":
return float
elif dataType == "STRING":
return str
Я думаю, что это не действительно удовлетворительное решение, потому что этот код как-то не очень уродлив и получает боль, когда есть больше типов данных, которые нужно поддерживать.
Есть ли у вас какие-либо идеи о том, как сделать этот тип "настройки типа" как-то лучше и более расширяемым?
Используйте словарь, например
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)
Вместо строк просто используйте список типов полей напрямую:
>>> 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]