请原谅我这个差劲的标题,我真的想不出一个合适的标题。
这就是我的问题。假设我得到了一个字符串列表:
['2010.01.01',
'1b',
'`abc'
'12:20:33.000']
我想做一个“类型检查”,这样给出的第一个字符串返回date类型,第二个返回布尔值,第三个返回符号,一次返回一个……返回值可以是字符串或任何东西,因为我要做的就是强制转换正确的ctype。
有什么办法可以做到吗?
ps:我的python是2.5
发布于 2013-01-23 08:00:20
>>> str = ['2010.01.01',
... '1b',
... '`abc'
... '12:20:33.000']
>>> [type(x) for x in str]
[<type 'str'>, <type 'str'>, <type 'str'>]
假设您使用eval来确定此列表。
发布于 2013-01-22 18:59:17
如果您完全确定可以信任这些内容--比如说,它不是来自一个可能以某种方式将代码偷偷放入列表中的用户--那么您可以将该列表映射到eval,它将捕获像数字这样的本机类型。然而,没有简单的方法可以知道这些字符串的含义--例如,如果您尝试evel '2010.01.01‘,python将认为您正在尝试解析一个数字,然后由于多余的小数而失败。
因此,您可以尝试一个两阶段策略:首先使用eval将列表转换为字符串与数字:
def try_cast (input_string):
try:
val = eval(input_string)
val_type = type(val)
return val, val_type
except:
return input_string, type('')
cast_list = map (try_cast, original_list)
这将给出一个元组列表,其中第二项是类型,第一项是转换后的项。对于更特殊的情况,比如日期,您需要对第一次传递后遗留下来的字符串使用相同的策略,使用try/except块尝试使用time.strptime().将它们转换为日期您需要找出期望的时间格式,并为每个时间格式生成解析表达式(可以查看python文档或类似http://www.tutorialspoint.com/python/time_strptime.htm的内容)。您必须尝试所有选项,看看哪些选项转换正确--如果其中一个有效,则值为日期;如果无效,则只是一个字符串。
https://stackoverflow.com/questions/14465686
复制相似问题