python字符串与格式字符串编号

时间:2015-11-11 06:42:31

标签: python

我想用Python进行字符串格式的反函数。 它就像时间模块中的strptime。

 str = '%d %f %d'%( 1 , 5.09 , 77)

str是'1 5.090000 77'

功能将是

ret_tuple = SOMETHING( "1 5.090000 77" , "%d %f %d")

返回值为(1,5.09,77)

有人知道这样的功能,还是我自己实施?

4 个答案:

答案 0 :(得分:1)

这样可行:

def convert(string, types):
    return tuple(typ(entry) for typ, entry in zip(types, string.split()))

convert("1 5.090000 77", (int, float, int))

答案 1 :(得分:0)

我不知道为什么你会想要这个,但作为一个非常简单的案例:

fmap = {'%d': int, '%f': float}

def silly_convert(number, formats):
   return tuple(fmap.get(i, str)(x)
                for i,x in zip(formats.split(' '), number.split(' ')))

>>> silly_convert("1 5.090000 77" , "%d %f %d")
(1, 5.09, 77)

答案 2 :(得分:0)

数字格式的倒数仅为float()

x = float("5.09000")

我建议将所有内容转换为浮点数,而不是浮点数和整数的混合数 - 混合意味着您的代码永远不知道手头有哪种数据类型。无论如何,你可以在打印时删除全零小数部分。

line = "1 5.090000 77"
numbers = [ float(n) for n in line.split() ]

但是,如果您确实希望您的数据是浮点数和整数的混合,那么您可以这样做:

numbers = [ (float(n) if "." in n else int(n)) for n in line.split() ]

如果您需要提前指定每个数字将使用哪种格式(无论输入是什么样的),那么只需使用@ BurhanKhalid的答案。例如,如果你希望第一个数字成为浮点数,即使它被给定为“3”;但请注意,如果期望int并且您看到“2.0”,那么您将收到该方法的错误。

答案 3 :(得分:0)

我假设你希望它适用于一般格式字符串,它不一定用空格分隔。您可以使用C' s sscanf的python等价物。从here下载scanf python模块并安装它(例如使用pip -e [extracted path]/scanf)。

In [1]: import scanf

In [2]: scanf.sscanf("1 5.090000 77" , "%d %f %d")
Out[2]: (1, 5.09, 77)