我們已經學習了字元串的使用方法,我們還學習了使用索引和分片操作字元串,經歷了這麼長的時間,相信大家也有所掌握;本節將討論並學習字元串的格式化與字元串的常用方法 <! more 字元串格式化 字元串是序列的一種,所以所有的通用序列操作當然都適用啦,這裡就不再重覆了,下麵我們來探討字元串的格式化 何為字 ...
我們已經學習了字元串的使用方法,我們還學習了使用索引和分片操作字元串,經歷了這麼長的時間,相信大家也有所掌握;本節將討論並學習字元串的格式化與字元串的常用方法
字元串格式化
字元串是序列的一種,所以所有的通用序列操作當然都適用啦,這裡就不再重覆了,下麵我們來探討字元串的格式化
何為字元串格式化?字元串格式化就是指把數據按照一定的格式組成一個字元串,這貌似很難說清楚,下麵來看個例子:
現有下列變數:
year = 2018
month = 3
day = 9
我們要輸出格式為“年|月|日”的字元串,那麼我們可以使用加號+
來進行拼接字元串:
output = str(year) + '|' + str(month) + '|' + str(day)
print(output)
我們將year、month、day三個變數按照一定的格式組成了一個字元串,這樣的過程就可以稱為字元串格式化。
然而,今天我們來探討的不是以這種拼接方式實現的字元串格式化,而是以用數據填充模板的方式來實現,也就是我們給出一個模板“年|月|日”,我們只需要提供三個值,年、月、日,然後就生成我們想要的字元串。
python支持的字元串格式方式有兩種,下麵來一一介紹
傳統方式
第一種字元串格式化使用百分號%
來實現,在%
的左邊是格式化字元串,也就是我們的模板,右邊是我們用來格式化的數據(元組類型),也就是用來填充的值,舉例如下:
>>> year = 2018
>>> month = 3
>>> day = 9
>>> output = '%s|%s|%s' % (year, month, day)
>>> print(output)
2018|3|9
>>>
模板字元串中的%s
叫做轉換說明符,也叫占位符,就是用來占著位置,等待被替換成提供的值,s表示這個位置將替換成字元串,如果值不是字元串,就使用str函數轉換成字元串,完整的轉換說明符,由以下部分按順序組成:
%
字元:這是轉換說明符的開始- 轉換標誌(可選):
-
表示左對齊,+表示在數值前加上正負號,空格表示正數之前保留空格,0表示轉換值後位數不足就用0填充 - 最小欄位寬度(可選):轉換後的值不能短於該值指定的寬度,如果該位置寫的是
*
,則寬度由%
右邊的元組提供 - 點
.
後跟精度值(可選):如果轉換的是浮點數,精度值就表示小數點後的位數,如果轉換的是字元串,精度值就表示最大的欄位寬度,如果為*
,那麼該值由%
右邊的元組提供 - 轉換類型:看下表:
轉換類型 | 含義 | 例子 |
---|---|---|
d或i | 有符號的十進位整數 | '%d' % 123 => '123' |
o | 無符號的八進位整數 | '%o' % 8 => '10' |
u | 無符號十進位整數 | '%u' % 123 => '123' |
x | 無符號十六進位整數(小寫) | '%x' % 123 => '7b' |
X | 無符號十六進位整數(大寫) | '%x' % 123 => '7B' |
e | 科學計數法表示的浮點數(小寫) | '%e' % 123.456 => '1.234560e+02' |
E | 科學計數法表示的浮點數(小寫) | '%E' % 123.456 => '1.234560E+02' |
f,F | 十進位浮點數 | '%f' % 123.456 => '123.456000' 、'%F' % 123.456 => '123.456000' |
g | 如果指數大於-4或者小於精度值則和e相同,其它情況與f相同 | 略 |
G | 如果指數大於-4或者小於精度值則和E相同,其它情況與F相同 | 略 |
c | 單字元串(ASCII碼值或則單字元字元串) | '%c' % 65 => 'A' 、'%c' % 'a' => 'a' |
r | 字元串(使用repr函數轉換任意python對象) | 'hello %r!' % 'world' => "hello 'world'!" |
s | 字元串(使用str函數轉換任意python對象 | 'hello %s!' % 'world' => 'hello world!' |
看到這個表相信大家都暈了,告訴大家一個秘密,我從來沒有記住這個表!⊙▽⊙
因為一般來說,大多數的值都是可以轉換成字元串的,所以最常用的轉換說明符也就一個%s
。(~ ̄▽ ̄)~
雖然不需要記住那麼多的轉換類型,但有些細節還是要記住的!
欄位寬度和精度
欄位寬度是轉換後的值所占的最少字元個數,精度就是轉換後的小數位數(對於浮點數),或者轉換後最大字元個數(對於字元串),這兩個參數都是整數或者星號*
,它們之間用點.
分隔(如果只指定寬度不指定精度就不必要使用點.
),舉例如下:
>>> '%9f' % 1.0 # 欄位寬度為9
' 1.000000'
>>> '%9.1f' % 1.0 # 欄位寬度為9精度為1
' 1.0'
>>> '%.2f' % 1.1 # 精度為2
'1.10'
可以看到,轉換後的字元串寬度不足時,預設在左邊用空格填充
使用星號*
的時候,需提供相應的寬度或精度:
>>> '%.*s' % (5, 'hello world!') # 精度為5
'hello'
標誌
緊接著%
,我們可以使用一個標誌,這個標誌可以是0
、+
、-
或者空格
0
表示數字的填充符使用0:
python >>> '%09f' % 1.0 '01.000000'
+
表示給數值加上正負號:
python >>> '%+d' % 12 '+12' >>> '%+d' % -12 '-12'
-
表示左對齊數值:
python >>> '%-9f' % 1.0 '1.000000 '
- 空格表示在正數前加上空格:
python >>> '% d' % 12 ' 12' >>> '% d' % -12 '-12'
補充:%%
表示百分號%
本身
學過C語言的都知道,這種傳統的字元串格式化方式和C語言的字元串格式化方式大同小異,但是這種方式正逐漸被python拋棄,python官方推薦下麵這種新的字元串格式化方式
更先進的方式
python的字元串有一個format方法,這個方法正是使用新版字元串格式化的渠道,下麵是用法:
基本用法:使用{}
做占位符,按順序填充參數:
>>> 'hello {}, I am {}'.format('world', 'Lee')
'hello world, I am Lee'
使用數字指定參數的位置(從0開始):
>>> 'Between {0} and {1}, I like {0}'.format('apple', 'banana')
'Between apple and banana, I like apple'
使用關鍵字參數指定參數:
>>> 'I am {name}, and my age is {age}.'.format(name='Lee', age=18)
'I am Lee, and my age is 18.'
>>> d = {'name': 'Lee', 'age': 18} # 使用字典
>>> 'I am {name}, and my age is {age}.'.format(**d) # 展開字典
'I am Lee, and my age is 18.'
還可以通過列表索引來指定參數:
>>> lst = ['Lee', 18]
>>> 'I am {0[0]}, and my age is {0[1]}.'.format(lst)
'I am Lee, and my age is 18.'
花括弧{}
中使用冒號:
分隔,左邊指定欄位名(數字,關鍵字等),右邊按順序指定:
- 填充字元:用於填充的字元,預設為空格
- 對齊方式 :
^
居中<
左對齊>
右對齊
- 正負號:
+
給數字加上正負號-
只給負數加上負號(預設)- 空格 給正數加上空格
- 寬度:指定最小欄位寬度,以0開始表示用0填充
- 精度:在寬度欄位後添加一個點
.
再寫此欄位,表示小數點後的位數(對於浮點數),或者最大欄位寬度(對於字元串) - 轉換類型:大致與傳統方式相同
補充:兩個{
表示{
本身,兩個}
表示}
本身。
讀者可以參照這篇文章,寫得比較詳細:Python 中 str.format() 方法詳解
字元串方法
瞭解了這麼多的字元串格式化方式,該介紹幾個字元串常用方法了。
要記住字元串是不可變的,所以下麵介紹到的方法都不會改變原來的字元串!
find
find方法用於在一個字元串中查找一個子串,返回第一個匹配字串的首字元索引,如果沒有找到就返回-1,舉例如下:
>>> 'hello Lee'.find('Lee')
6
>>> 'hello Lee'.find('jack')
-1
還可以指定查找的起點、終點(不包含):
>>> s = 'hello Lee'
>>> s.find('Lee', 7) # 指定起點
-1
>>> s.find('Lee', 0, 9) # 指定起點和終點
6
replace
replace方法用於返回替換後的字元串,如:
>>> 'hello world!'.replace('world', 'Lee') # 用'Lee'替換'world'
'hello Lee!'
translate
和replace方法類似,但是可以同時替換多個字元,用法如下:
>>> table = str.maketrans('hw', 'HW') # 製作映射表,h=>H,w=>W
>>> table
{104: 72, 119: 87}
>>> 'hello world'.translate(table)
'Hello World'
strip
該方法用於去除兩側指定的字元串(預設為空白符,即空格、製表符、換行符等),如:
>>> ' hello world '.strip()
'hello world'
>>> '**hello world***'.strip('*')
'hello world'
補充:lstrip只作用於字元串左端,rstrip只作用於字元串右端
split和join
split方法用來講字元串分割成序列,如:
>>> s = 'Guangdong, Zhejiang, Shanghai'
>>> s.split(',') # 用逗號','作為分割符
['Guangdong', ' Zhejiang', ' Shanghai']
>>> s.split() # 預設使用空白符(空格、製表符、換行符等)作為分割符
['Guangdong,', 'Zhejiang,', 'Shanghai']
>>> s.split(',', 1) # 分割1次
['Guangdong', ' Zhejiang, Shanghai']
補充:rsplit從右邊開始分割
join用於將序列連接成字元串,如:
>>> ','.join(['hello', 'world'])
'hello,world'
lower和upper
lower方法和upper方法分別返迴轉換成小寫和大寫的字元串,如:
>>> 'AbcD'.lower()
'abcd'
>>> 'AbcD'.upper()
'ABCD'
本節內容較多,好好消化吧!
不知道下一次有時間更新又是什麼時候咯 ヾ( ̄▽ ̄)Bye~Bye~