[英]python string to number with format string
我想用 Python 实现字符串格式的反函数。 它就像 time 模块中的 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)
。
有没有人知道这样的功能,还是我自己实现?
这会起作用:
def convert(string, types):
return tuple(typ(entry) for typ, entry in zip(types, string.split()))
convert("1 5.090000 77", (int, float, int))
我假设您希望它适用于通用格式字符串,它不一定用空格分隔。 您可以使用与 C 的sscanf
等效的 python。 从这里下载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)
我不知道你为什么想要这个,但作为一个非常简单的例子:
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)
数字格式的反面就是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”,则该方法会出错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.