拆分字符串但保持类型

时间:2014-04-08 20:41:31

标签: python split

我有一个csv行,其中每行的每个元素可以是不同类型(intstrfloat,...)。 e.g。

"today is", 10, "tomorrow is" 20

我还有一个类型的SQL查询:

ramble varchar,
date int,
ramble varchar,
date int,

我的目标是查找是否有任何输入文本符合sql架构。要做到这一点,我想在python:

  1. 拆分输入文字,
  2. 检查每个元素的类型是否与sql架构匹配
  3. 但是,当我使用string.split()(或re.split())分割字符串时,返回列表的所有元素都是"字符串"的类型。所以我的问题是,如何在拆分后保留输入的类型?

    谢谢。

2 个答案:

答案 0 :(得分:1)

def try_cast( val ):
    try:
        if float(val) - int(val) > 0.01:
            return float(val)
        return int(val)
    except:
        return val

import csv
from functools import partial
fname = "test.csv"
cast_row_map = partial(map,try_cast)
data = map(cast_row_map,csv.reader(open(fname)))

可能会做你想要的事情

答案 1 :(得分:1)

我认为@JoranBeasley的答案会奏效。然而,对于初学者来说,“部分”和调用“map()”的整个使用可能有点不透明。

也就是说,请注意“try_cast”可以增强为“查找”任何类型的数据,例如:

import datetime
def try_cast(val):
    try:
        format = "%Y-%m-%d %H:%M:%S"
        return datetime.strptime(val, format)
    except:
        # looks like it is not a date
        pass
    try:
        # I prefer this test over Joran's
        if float(val) == int(val):
            return int(val)
        return float(val)
    except:
        # looks like it is not an int or float either
        return val