pythonstringformat
1. python字元串格式化什麼意思
在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 存儲輸出字元的數量放進參數列表的下一個變數中
2. string.format添加多個相同字元
string.format() 方法可以將多個值插手皮租入到指定的字元串中,可以按照指定的格式進行格式化輸出。在字元串格式化的過程中,我們可以使用重復字元的方式來添加多個相同字元,使用重復字元的方式可以使代碼更加簡潔,提高代碼的可讀性。
具體地說,我們可以使用大括弧{}來表示需要插入的值,然後在大括弧中使用冒號:來畢兆指定格式化輸出的方式。如果我們需要添加多個相同的字元,可以在冒號後面添加重握御復字元的符號,例如使用{:*^10}來表示需要在輸出的字元串中添加10個*字元,且這些字元居中對齊。
拓展一下,除了使用重復字元的方式,我們還可以使用其他的字元串格式化方式來添加多個相同字元。例如,我們可以使用字元串乘法運算符*來實現添加多個相同字元的功能,例如使用'*' * 10來表示需要添加10個*字元。此外,在Python 3.6及以上版本中,我們還可以使用f-string的方式來進行字元串格式化,這種方式更加簡潔方便,可以在字元串中直接插入變數,例如使用f'{"*" * 10}'來表示需要在字元串中添加10個*字元。
3. python中「format後的參數排列順序必須按照格式字元串中槽{}的排列順序依次一一對應」為什麼錯誤謝謝
format函數實現字元串格式化的功能
基本語法為:
通過 : 和 {} 來控制字元串的操作
一、對字元串進行操作
1. 不設置指定位置,按默認順序插入
①當參數個數等於{}個數的時候
str_1 = "小明{}小美,可是小美{}小明".format("喜歡", "不喜歡")
print(str_1)
運行結果:
②當參數個數大於{}個數的時候
str_1 = "小明{}小美,可是小美{}小明".format("喜歡", "不喜歡", "也不喜歡", "更不喜歡")
print(str_1)
運行結果:
③當參數個數習小於{}個數的時候
str_1 = "小明{}小美,可是小美{}小明".format("喜歡")
print(str_1)
運行結果:
程序會報錯:越界
由此可以得出,當我們不指定參數位置的時候,format函數會幫我們按順序將其接收到的參數,填入到{}中。
2. 設置指定位置
當format接收到的參數個數大於{}或者我們想將不同{}替換為相同字元串的時候,我們可以在{}內指定接收第幾個參數。format接收的參數,從0開始。
str_1 = "小明{1}小美,可是小美{3}小明,小美{0}小明,小美{2}小華".format("不喜歡", "喜歡", "更喜歡", "很討厭")
print(str_1)
在這一句代碼中,分別為不同的{}指定了接收的參數位置。
運行結果:
很顯然,如果我們的{}的個數小於format的參數也是OK的。
str_1 = "小明{1}小美,可是小美{3}小明,小美{2}小華".format("不喜歡", "喜歡", "更喜歡", "很討厭")
print(str_1)
運行結果:
由此我們得出結論:
在使用format()函數的時候,我們給format()的個數是不限的,如果我們並沒有在{}中指定位置,那麼format()會自動按順序將參數填入{},而如果我們為{}指定了位置,那麼format()就會把指定位置的參數填入對應的{}中。
3.設置format()參數的值①直接在format()中進行賦值
str_1 = "博主:{name}, 博客地址:{url}".format(name="KaiSarH", url="https://blog.csdn.net/KaiSarH")
運行結果:
②通過傳遞多值參數向format傳遞參數進而對{}進行賦值
- 使用**傳遞字典。
在Python中,使用**可以傳遞一個字典參數,我們可以使用鍵名進行匹配,進而進行賦值
dict_1 = {"name": "KaiSarH",
"url": "https://blog.csdn.net/KaiSarH"}
str_2 = "博主:{name}, 博客地址:{url}".format(**dict_1)
運行結果:
我們向format()傳遞的字典參數,所包含的鍵值對,必須包含所有的{}名。只能多(正確),不能少(報錯)。
dict_1 = {"name": "KaiSarH",
"url": "https://blog.csdn.net/KaiSarH",
"login": "login information"}
str_2 = "博主:{name}, 博客地址:{url}".format(**dict_1)
print(str_2)
dict_1 = {"name": "KaiSarH",
"key": "https://blog.csdn.net/KaiSarH",
"login": "login information"}
str_4 = "博主:{name}, 博客地址:{url}".format(**dict_1)
print(str_4)
運行結果:
注意:我們可以向format()中傳遞多個字典,但是不可以含有相同鍵。
dict_1 = {"name": "KaiSarH",
"url": "https://blog.csdn.net/KaiSarH",
"login": "login information"}
str_2 = "博主:{name}, 博客地址:{url}".format(**dict_1)
dict_2 = {"name": "KaiSarH",
"key": "https://blog.csdn.net/KaiSarH",
"login": "login information"}
str_4 = "博主:{name}, 博客地址:{url}".format(**dict_1, **dict_2)
print(str_4)
運行結果:
- 傳遞列表
list_1 = ["KaiSarH","https://blog.csdn.net/KaiSarH"]
str_3 = "博主:{0[0]}, 博客地址:{0[1]}".format(list_1)
運行結果:
除了傳遞一個列表,我們也可以向format()中傳遞多個列表,只需保證取值的時候無誤就可以。
list_1 = ["ZhangSan","https://blog.csdn.net/KaiSarH"]
list_2 = ["KaiSarH", "http:www..com"]
str_3 = "博主:{1[0]}, 博客地址:{0[1]}".format(list_1, list_2)
運行結果:
③向format()中傳入對象,進行賦值
與列表相同,我們同樣可以向format()中傳遞多個對象,只要在賦值的之後做好對應就可以。
class Dog:
def __init__(self, name):
self.name = name
class Mouse:
def __init__(self, name):
self.name = name
tom = Dog("Tom")
jerry = Mouse("Jerry")
str_1 = "{0.name} want to eat {1.name}".format(tom, jerry)
print(str_1)
運行結果:
二、對數字進行格式化
對於數字的格式化,我們主要是在{}中進行設置格式化數字的多種方法
1.保留小數點後n位
格式:{:.nf}
print("{:.1f}".format(3.1415926535))
print("{:.3f}".format(3.1415926535))
print("{:.4f}".format(3.1415926535))
print("{:.6f}".format(3.1415926535))
運行結果:
2.帶符號保留小數點後n位
格式:{:+.nf}
print("{:+.1f}".format(3.1415926535))
print("{:+.3f}".format(-3.1415926535))
print("{:+.4f}".format(3.1415926535))
print("{:+.6f}".format(-3.1415926535))
運行結果:
{:.nf}和 {:+.nf}的區別
負數無區別,整數有無符號。
print("{:.1f}".format(3.1415926535))
print("{:+.1f}".format(3.1415926535))
print("{:.3f}".format(-3.1415926535))
print("{:+.3f}".format(-3.1415926535))
print("{:.4f}".format(3.1415926535))
print("{:+.4f}".format(3.1415926535))
print("{:.7f}".format(-3.1415926535))
print("{:+.7f}".format(-3.1415926535))
運行結果:
3.不帶小數(只保留整數)
格式:{:.0f}
print("{:.0f}".format(3.1415926535))
print("{:.0f}".format(-3.1415926535))
print("{:.0f}".format(3.8415926535))
運行結果:
4.如果整數的位數不足n位,在左邊進行數字補零。如果已經夠了n位,直接輸出
格式:{:0>nd}
print("{:0>2d}".format(5))
print("{:0>3d}".format(5))
print("{:0>5d}".format(123456))
運行結果:
5.如果整數的位數不足n位,在右邊進行x補充。如果已經夠了n位,直接輸出
格式:{:x<4d}
print("{:x<2d}".format(5))
print("{:x<3d}".format(5))
print("{:x<4d}".format(123456))
運行結果:
很顯然,在補充操作中,我們既可以指定在哪一邊補充,也可以指定補充的值為什麼。
我們也可以利用print("{:x>.2f}".format(3.1))或者{:x<.2f>
6.以逗號分隔數字格式,每三位加入一個,
格式:{:,}
print("{:,}".format(314156926))
運行結果:
7.百分比格式(在我理解,就是把數字×100,保留兩位數字,然後加一個百分號)
格式:{:.2%}
print("{:.2%}".format(0.27896))
運行結果:
8.指數記法
格式:{:.2e}
print("{:.2e}".format(100))
運行結果:
9.右對齊(默認寬度為10)
格式:{:>10d}
print("{:>10d}".format(100))
print("{:>10d}".format(2))
print("{:>10d}".format(12580))
運行結果:
10.左對齊(默認寬度為10)
格式:{:<10d}
print("{:<10d}".format(100))
print("{:<10d}".format(2))
print("{:<10d}".format(12580))
運行結果:
11.中間對齊(默認寬度為10)
格式:{:^10d}
print("{:^10d}".format(100))
print("{:^10d}".format(2))
print("{:^10d}".format(12580))
運行結果:
12.進制——b、d、o、x 分別是二進制、十進制、八進制、十六進制。
格式:
『{:b}'.format(11)
『{:d}'.format(11)
『{:\o}'.format(11)
『{:x}'.format(11)
『{:#x}'.format(11)
『{:#X}'.format(11)
print("{:b}".format(125))
print("{:d}".format(125))
print("{:o}".format(125))
print("{:x}".format(125))
print("{:#x}".format(125))
print("{:#X}".format(125))
運行結果:
4. python問題,用format函數來格式化字元串,如何設置寬度為變數
在{}里繼續嵌套一次{},並在format的參數里增加一項即可。
b=10
print("{0:*^{width}}".format("字元串", width=b))
b=30
print("{0:*^{width}}".format("字元串", width=b))
最後得到的輸出如下
***字元串****
*************字元串**************
5. python string函數
python string函數是什麼?一起來看下吧:
python string函數包括:
1、str.capitalize:將原字元串內的首字母轉成大寫,其他部分小寫,再返回新字元串
print("s.capitalize() = {function}" s.capitalize() = Abcada a
2、str.lower:將原字元串的字母轉為小寫
print("s.lower() = {function}".format(function = s.lower())) s.lower() = abcada a
3、str.upper:將原字元串的字母轉為大寫
print("s.upper() = {function}".format(function = s.upper())) s.upper() = ABCADA A
4、str.swapcase:將原字元串的大寫小寫反轉
print("s.swapcase() = {function}".format(function = s.swapcase())) s.swapcase() = ABCAdA A
5、str.title:原字元串內如果有特殊字元(包括數字)連接字母,則將特殊字元後的首個英文字母轉化為大寫形態,並返回新字元串
print("s2.title() = {function}".format(function = s2.title())) s2.title() = 123A Abc Abcsaa S
6、str.center:str.center(寬度,填充字元) 將字元串以居中的格式返回,若寬度值比len(s)小則返回原字元串,填充以從左到右為規則,填充字元的默認值為空格,值可以自己更改
print("s2.center() = {function}".format(function = s2.center(19,'&'))) print("s2.center() = {function}".format(function = s2.center(20,'&'))) #s2 = 123a abc ABCSAa s s2.center() = &123a abc ABCSAa s s2.center() = &123a abc ABCSAa s &
7、str.expandtabs:str.expandtabs(tabsize = 8) 將原字元串中 以前的字元補滿8位(默認),tabsize的值從0-7即8位,在0-7中任意取值則默認tabsize = 8,此後往上+1,就相當於增加一個空格
print("s3.expandtabs ={function}".format(function = s3.expandtabs())) print("s3.expandtabs ={function}".format(function = s3.expandtabs(0))) print("s3.expandtabs ={function}".format(function = s3.expandtabs(5))) print("s3.expandtabs ={function}".format(function = s3.expandtabs(8))) print("s3.expandtabs ={function}".format(function = s3.expandtabs(9)))#s3 = " as b123" s3.expandtabs = as b123 s3.expandtabs =as b123 s3.expandtabs = as b123 s3.expandtabs = as b123 s3.expandtabs = as
除了上述舉例的,string函數還有許多實用的函數。
6. format在python中的含義
在Python中,format()是一個內置函數,用於將變數值格式化為字元串。該函數可以接受多個參數,其中第一個參數是字元串,包含一個或多個替換欄位。替換欄位由花括弧括起來,其中可能包含一個或多個格式規范,用於指定如何格式化替換值。這些規范包括如何對數字進行舍入,如何格式化日期和時間等等。
Python的format()函數非常靈活,可以用於各種字元串格式化任務。例如,您可以使用它來創建自定乎喚義錯誤消息,生成包含數據的電子郵件,或將數據寫入日誌文件。此外,format()函數可以與其他Python字元串處理函數一起使用,例如join()和split(),以實現更復雜的字元串操作。
在Python的格式化字元串中,還可以使用佔位符來指定要格式化的變數類型。例如,您可以使用%s佔位符來格式化字元串,使用%d佔位符來格式化整數,使用%f佔位符來格式化浮點數等等。這些佔位符可以與格式規范一起使用,以指定要顯示的小數位數,歲伏凱對齊方式等其他細節。
總之,Python的format()函數是一個非常有用的工具廳猜,可以輕松地將變數值格式化為字元串,並將它們插入到其他字元串中。無論您是在編寫簡單的腳本還是復雜的應用程序,使用format()函數都可以使您的代碼更加優雅和易於維護。
7. Python如何格式化輸出字元串!
python一共有兩種格式化輸出語法,
一種是類似於C語言printf的方式,稱為 Formatting Expression
>>>print '%s%d-%d'%('hello',7,1)
'hello7-1'
另一種是類似於C#的方式,稱為String Formatting Method Calls
>>>print '{0}{1}:{2}'.format('hello','1','7')
'hello1:7'
第一種方式可以指定浮點數的精度,例如
>>> print'%.3f'%1.234567869
'1.235'
運行時動態指定浮點數的精度
但是當代碼在運行中如何動態地通過參數來指定浮點數的精度呢?
python的神奇之處在於它又提供了一種非常方便的語法。只需要在 typecode(這里是f)之前加一個 *,浮點數的精度就用它前面的數字來指定。
>>>foriinrange(5):
... print'%.*f'%(i,1.234234234234234)
...
'1'
'1.2'
'1.23'
'1.234'
'1.2342'
通過輸出結果可以看出,精度都是在運行時動態指定,這樣就省去了格式化字元串的拼湊。
使用String Formatting Method Calls可以更簡潔地完成功能。
>>>foriinrange(5):
... print'{0:.{1}f}'.format(1/3.0,i)
...
'0'
'0.3'
'0.33'
'0.333'
'0.3333'
附錄是一些常用用法——
python print格式化輸出。
1. 列印字元串
print ("His name is %s"%("Aviad"))
2.列印整數
print ("He is %d years old"%(25))
3.列印浮點數
print ("His height is %f m"%(1.83))
4.列印浮點數(指定保留小數點位數)
print ("His height is %.2f m"%(1.83))
5.指定佔位符寬度
print ("Name:%10s Age:%8d Height:%8.2f"%("Aviad",25,1.83))
6.指定佔位符寬度(左對齊)
print ("Name:%-10s Age:%-8d Height:%-8.2f"%("Aviad",25,1.83))
7.指定佔位符(只能用0當佔位符?)
print ("Name:%-10s Age:%08d Height:%08.2f"%("Aviad",25,1.83))
8.科學計數法
format(0.0015,'.2e')
8. python字元串格式化什麼意思
python字元串格式化的意思就是用format函數格式化字元串的用法。
用法:它通過{}和:來代替傳統%方式。
1、使用位置參數
要點:從以下例子可以看出位置參數不受順序約束,且可以為{},只要format里有相對應的參數值即可,參數索引從0開,傳入位置參數列表可用*列表
>>>li=['hoho',18]
>>>'mynameis{},age{}'.format('hoho',18)
'mynameishoho,age18'
>>>'mynameis{1},age{0}'.format(10,'hoho')
'mynameishoho,age10'
>>>'mynameis{1},age{0}{1}'.format(10,'hoho')
'mynameishoho,age10hoho'
>>>'mynameis{},age{}'.format(*li)
'mynameishoho,age18'
2、使用關鍵字參數
要點:關鍵字參數值要對得上,可用字典當關鍵字參數傳入值,字典前加**即可
>>>hash={'name':'hoho','age':18}
>>>'mynameis{name},ageis{age}'.format(name='hoho',age=19)
'mynameishoho,ageis19'
>>>'mynameis{name},ageis{age}'.format(**hash)
'mynameishoho,ageis18'
3、填充與格式化
:[填充字元][對齊方式 <^>][寬度]
>>>'{0:*>10}'.format(10)##右對齊
'********10'
>>>'{0:*<10}'.format(10)##左對齊
'10********'
>>>'{0:*^10}'.format(10)##居中對齊
'****10****'
4、精度與進制
>>>'{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、使用索引
>>>li
['hoho',18]
>>>'nameis{0[0]}ageis{0[1]}'.format(li)
'nameishohoageis18
9. Python 里的 String format問題, 我搞不懂這個東西到底是怎麼用的。
舉世余咐個例子好了:
'%-*s%*s' % (x, s1, y, s2)
s1左對齊列印,總共要佔用x長度,不夠的用空格補充,若字元串超出以字元串實際長度為准;
s2沒有'-'即按照右對齊,同樣方式列印。這里'*'你可以理解為對應x個數的空格佔位符吧。
另外毀逗,format是保留字,對應header_format建議變搜純量用content_format做變數命名;
列印水果價錢可以用字典,比較簡潔:
d = {'Apple':0.4, 'Pears':0.5, 'Cantalopes':1.92, 'Dried Apricots(16)':8,'Prues':12}
for k in d.keys():
print content_format % (item_width, k, price_width, d[k])
10. python語言format用法
Format為CString類的一個成員函數,它通過格式操作使任意類型的數據轉換成一個字元串Format裡面可以寫普通的字元串,比如「mynameis」,但有些格式指令字元具有特殊意義,比如「%6s」。
Format(<表達式>[,<格式字元串>])其中,<表達式>:要格式化的數值、日期或字元串表達式。<格式字元串>:指定表達式的值的輸出格式。格式字元有三類:數值格式、日期格式和字元串格式。格式字元要加引號。
方法如下:
1、首先按下「Win+R」組合鍵,打開運行窗口。