2011-11-03 35 views
1

我正在逐行读取文件。行用“|”分隔。由于值从文件中读取后被解释为字符串,我想将它们转换为正确的表示(我现在是每个“列”值的数据类型)。设置允许的数据类型的范围/类型为python中的文件的值强制转换

因此,我写了貌似有点“翻译”方法如下:

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

我认为这是不是一个真正的令人满意的解决方案,因为这段代码是有点不太难看,并得到一个痛苦当有更多的数据类型需要支持时。

你有什么想法如何使这种“类型设置”以某种方式更好,更可扩展?

回答

2

使用字典,例如

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

或者,如果性能是必要的(配置文件第一),定义参数列表中的字典所以不需要每个函数被调用时被创建:

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

击败我吧。 :)虽然,dictioonary? –

+0

是的 - 想过那个... –

+0

你在其他地方说数据类型是在文件中指定的...我假定字段名称也是如此。在这种情况下,您可以直接从字段名称创建映射到其Python类型,并省略中间人类型。 – kindall

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

嗨 - 是个好主意......但字段类型的信息实际上来自文件本身(第二行)。因此,我在“编译”时间内不知道它 –

相关问题