为python中的文件中的值设置允许的数据类型/类型转换的范围

时间:2011-11-03 04:44:04

标签: python dynamic types casting

我正在逐行阅读文件。行以“|”分隔。由于值从文件中读取后会被解释为字符串,我想将它们转换为正确的表示形式(我现在是每个“列”值的数据类型)。

因此,我写了一个小的“翻译”方法,如下所示:

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

我认为这不是一个令人满意的解决方案,因为这个代码在某种程度上并不是非常难看,并且当需要支持更多数据类型时会感到痛苦。

您是否有任何想法如何使这种“类型设置”更好,更可扩展?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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]