请原谅我糟糕的头衔,我真的无法想出一个合适的头衔。
这是我的问题。说我得到了一个字符串列表:
['2010.01.01',
'1b',
'`abc'
'12:20:33.000']
我想进行'类型检查',以便给定第一个字符串,它返回类型日期,第二个布尔值,第三个符号,第四个一次......等等。返回的值可以是字符串或因为我想要做的就是投出正确的ctypes。
有什么办法吗?
ps:我的python是2.5
答案 0 :(得分:0)
>>> str = ['2010.01.01',
... '1b',
... '`abc'
... '12:20:33.000']
>>> [type(x) for x in str]
[<type 'str'>, <type 'str'>, <type 'str'>]
假设您使用eval来确定此列表。
答案 1 :(得分:-1)
如果您完全确定,您可以信任该内容 - 例如,它不是来自可能以某种方式将代码隐藏到列表中的用户 - 您可以将列表映射到 eval ,这将捕获像数字这样的本地类型。然而,没有简单的方法可以知道这些字符串应该是什么意思 - 例如,如果你试图evel'2010.01.01'python会认为你试图解析一个数字然后因为额外的小数而失败。< / p>
所以你可以尝试两个阶段的策略:首先使用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的内容)你必须尝试所有选项并正确查看哪些选项已转换 - 如果有人工作,则该值为日期;如果没有,它只是一个字符串。