格式 描述
%%百分號標記 #就是輸出一個%
%c字符及其ASCII碼
%s字符串
%d有符號整數(十進制)
%u無符號整數(十進制)
%o無符號整數(八進制)
%x無符號整數(十六進制)
%X無符號整數(十六進制大寫字符)
%e浮點數字(科學計數法)
%E浮點數字(科學計數法,用E代替e)
%f浮點數字(用小數點符號)
%g浮點數字(根據值的大小采用%e或%f)
%G浮點數字(類似于%g)
%p指針(用十六進制打印值的內存地址)
%n存儲輸出字符的數量放進參數列表的下一個變量中
%格式化符也可用于字典,可用%(name)引用字典中的元素進行格式化輸出。
負號指時數字應該是左對齊的,“0”告訴Python用前導0填充數字,正號指時數字總是顯示它的正負(+,-)符號,即使數字是正數也不例外。
可指定最小的字段寬度,如:"%5d" % 2。也可用句點符指定附加的精度,如:"%.3d" % 3。
e.g.
# 例:數字格式化
nYear = 2018
nMonth = 8
nDay = 18
# 格式化日期 %02d數字轉成兩位整型缺位填0
print '%04d-%02d-%02d'%(nYear,nMonth,nDay)
>> 2018-08-18# 輸出結果
fValue = 8.123
print '%06.2f'%fValue# 保留寬度為6的2位小數浮點型
>> 008.12# 輸出
print '%d'%10# 輸出十進制
>> 10
print '%o'%10# 輸出八進制
>> 12
print '%02x'%10# 輸出兩位十六進制,字母小寫空缺補零
>> 0a
print '%04X'%10# 輸出四位十六進制,字母大寫空缺補零
>> 000A
print '%.2e'%1.2888# 以科學計數法輸出浮點型保留2位小數
>> 1.29e+00
格式化操作符輔助指令
符號 作用
* 定義寬度或者小數點精度
- 用做左對齊
+ 在正數前面顯示加號( + )
在正數前面顯示空格
# 在八進制數前面顯示零('0'),在十六進制前面顯示'0x'或者'0X'(取決于
用的是'x'還是'X')
0 顯示的數字前面填充‘0’而不是默認的空格
% '%%'輸出一個單一的'%'
(var) 映射變量(字典參數)
m.n m 是顯示的最小總寬度,n 是小數點后的位數(如果可用的話)
python字符串格式化的意思就是用format函數格式化字符串的用法。
用法:它通過{}和:來代替傳統%方式。
1、使用位置參數
要點:從以下例子可以看出位置參數不受順序約束,且可以為{},只要format里有相對應的參數值即可,參數索引從0開,傳入位置參數列表可用*列表
>>> li = ['hoho',18]
>>> 'my name is {} ,age {}'.format('hoho',18)
'my name is hoho ,age 18'
>>> 'my name is {1} ,age {0}'.format(10,'hoho')
'my name is hoho ,age 10'
>>> 'my name is {1} ,age {0} {1}'.format(10,'hoho')
'my name is hoho ,age 10 hoho'
>>> 'my name is {} ,age {}'.format(*li)
'my name is hoho ,age 18'
2、使用關鍵字參數
要點:關鍵字參數值要對得上,可用字典當關鍵字參數傳入值,字典前加**即可
>>> hash = {'name':'hoho','age':18}
>>> 'my name is {name},age is {age}'.format(name='hoho',age=19)
'my name is hoho,age is 19'
>>> 'my name is {name},age is {age}'.format(**hash)
'my name is hoho,age is 18'
3、填充與格式化
:[填充字符][對齊方式 ][寬度]
1
2
3
4
5
6
>>> '{0:*>10}'.format(10) ##右對齊
'********10'
>>> '{0:*<10}'.format(10) ##左對齊
'10********'
>>> '{0:*^10}'.format(10) ##居中對齊
'****10****'
4、精度與進制
1
2
3
4
5
6
7
8
9
10
>>> '{0:.2f}'.format(1/3)
'0.33'
>>> '{0:b}'.format(10) #二進制化妝
'1010'
>>> '{0:o}'.format(10) #八進制
'12'
>>> '{0:x}'.format(10) #16進制
'a'
>>> '{:,}'.format(12369132698) #千分位格式化
'12,369,132,698'
5、使用索引
在python中也有類似于c中的printf()的格式輸出標記。在python中格式化輸出字符串使用的是%運算符,通用的形式為
格式標記字符串 % 要輸出的值組
其中,左邊部分的”格式標記字符串“可以完全和c中的一致。右邊的'值組'如果有兩個及以上的值則需要用小括號括起來,中間用短號隔開。重點來看左邊的部分。左邊部分的最簡單形式為:
%cdoe
其中的code有多種,不過由于在python中,所有東西都可以轉換成string類型,因此,如果沒有什么特殊需求完全可以全部使用’%s‘來標記。比如:
'%s %s %s' % (1, 2.3, ['one', 'two', 'three'])
它的輸出為'1 2.3 ['one', 'two', 'three']',就是按照%左邊的標記輸出的。化妝雖然第一個和第二值不是string類型,一樣沒有問題。在這個過程中,當電腦發現第一個值不是%s時,會先調用整型數的函數,把第一個值也就是1轉成string類型,然后再調用str()函數來輸出。前面說過還有一個repr()函數,如果要用這個函數,可以用%r來標記。除了%s外,還有很多類似的code:
整型數:%d
無符號整型數:%u
八進制:%o
十六進制:%x %X
浮點數:%f
科學記數法: %e %E
化妝根據數值的不同自動選擇%e或%f: %g
根據數值的不同自動選擇%E或%f: %G
就跟前面說用\進行轉義一樣,這里用%作為格式標記的標識,也有一個%本身應該如何輸出的問題。如果要在”格式標記字符串“中輸出%本身,可以用%%來表示。
上面說的只是格式標記的最簡間的形式,來看復雜一點的:
‘%6.2f’ % 1.235
在這種形式中,在f的前面出現了一個類似小數的6.2它表示的意思是,總共輸出的長度為6個字符,其中小數2位。還有更復雜的:
‘%06.2f’ % 1.235
在6的前面多了一個0,表示如果輸出的位數不足6位就用0補足6位。這一行的輸出為‘001.24’,可以看到小數也占用一位。類似于這里0這樣的標記還有-、+。其中,-表示左對齊,+表示在正數前面也標上+號,默認是不加的。最后來看最復雜的形式:
‘%(name)s:%(score)06.1f’ %{'score':9.5, 'name':'newsim'}
這種形式只用在要輸出的內容為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存儲輸出字符的數量放進參數列表的下一個變量中