簡體   English   中英

python字符串到帶有格式字符串的數字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM