字串的格式化

2021-05-24 14:12:49 字數 1641 閱讀 7374

在python中也有類似於c中的printf()的格式輸出標記。在python中格式化輸出字串使用的是%運算子,通用的形式為

其中,左邊部分的」格式標記字串「可以完全和c中的一致。右邊的'值組'如果有兩個及以上的值則需要用小括號括起來,中間用短號隔開。重點來看左邊的部分。左邊部分的最簡單形式為:

其中的code有多種,不過由於在python中,所有東西都可以轉換成string型別,因此,如果沒有什麼特殊需求完全可以全部使用』%s『來標記。比如:

它的輸出為'1 2.3 ['one', 'two', 'three']',就是按照%左邊的標記輸出的。雖然第乙個和第二值不是string型別,一樣沒有問題。在這個過程中,當電腦發現第乙個值不是%s 時,會先呼叫整型數的函式,把第乙個值也就是1轉成string型別,然後再呼叫str()函式來輸出。前面說過還有乙個repr()函式,如果要用這個 函式,可以用%r來標記。除了%s外,還有很多類似的code:

就跟前面說用/進行轉義一樣,這裡用%作為格式標記的標識,也有乙個%本身應該如何輸出的問題。如果要在」格式標記字串「中輸出%本身,可以用%%來表示。

上面說的只是格式標記的最簡間的形式,來看複雜一點的:

在這種形式中,在f的前面出現了乙個類似小數的6.2它表示的意思是,總共輸出的長度為6個字元,其中小數2位。還有更複雜的:

在6的前面多了乙個0,表示如果輸出的位數不足6位就用0補足6位。這一行的輸出為『001.24』,可以看到小數也占用一位。類似於這裡0這樣的標記還有-、+。其中,-表示左對齊,+表示在正數前面也標上+號,預設是不加的。最後來看最複雜的形式:

這種形式只用在要輸出的內容為dictionary(一種python的資料型別)時, 小括號中的(name)和(score)對應於後面的鍵值對中的鍵。前面的例子可以看到,」格式標記字串「中標記的順序和"要輸出的值組"中的值是一一 對應的,有順序,一對一,二對二。而在這種形式中,則不是,每個格式標記對應哪個值由小括號中的鍵來指定。這行**的輸出 為:'newsim:0009.5'。

有時候在%6.2f這種形式中,6和2也不能事先指定,會在程式執行過程中再產生,那怎麼輸入呢,當然不能用%%d.%df或%d.%d%f。可以 用%*.*f的形式,當然在後面的」要輸出的值組「中包含那兩個*的值。比如:'%*.*f' % (6, 2, 2.345)就相當於'%6.2f' % 2.345。

不過如果記不住,或不想那麼耐煩,完全可以全部用%s代替,或者用多個"+"來構造類似的輸出字串。這裡的%真有點除法的味道,怪不得設計者會選擇用%這個除號。

象c 中的sprintf函式一樣,可以用「%」來格式化字串。

table 3.1. 字串格式化**格式

描述%%

百分號標記

%c字元及其ascii碼

%s字串

%d有符號整數(十進位制)

%u無符號整數(十進位制)

%o無符號整數(八進位制)

%x無符號整數(十六進製制)

%x無符號整數(十六進製制大寫字元)

%e浮點數字(科學計數法)

%e浮點數字(科學計數法,用e代替e)

%f浮點數字(用小數點符號)

%g浮點數字(根據值的大小採用%e或%f)

%g浮點數字(類似於%g)

%p指標(用十六進製制列印值的記憶體位址)

%n儲存輸出字元的數量放進引數列表的下乙個變數中

字串格式化

sprintf snprintf snprintf std stringstream std strstream boost lexical cast boost format cstring format 1 sprintf 使用 sprintf 不安全,輕則破壞資料的準確性,重則程式崩潰。請看下...

格式化字串

通常在使用字串的時候,會對字串進行格式化,然後輸出或呼叫 一般我們使用替換標記對字串進行格式化 string str1 string.format add is 1,2,3 而且在c 中的替換標記可以以任意順序和次數出現在格式化字串中,但替換值是按順序排的,而且替換標記不能超出索引範圍 string...

字串格式化

例如 string s hello map.put target world string res format s,map 有什麼用呢?比如在some.properties中配置模板字串,但是如果用 這種方式,在配置了spring讀取properties注入變數的時候,這個變數就找不到會報錯。這個...