1. 程式人生 > >python3.5修煉手冊9

python3.5修煉手冊9

duyuheng 字符串的基本操作 字符串格式化 字符串方法

字符串

可以使用使用(‘‘或"")創建字符串。

創建字符串很簡單,只要為變量分配一個值即可。

例如:

field=‘Hello‘

註意:字符串是不可變的,所以字符串做不到分片賦值

可以在輸出語句中輸出兩行

print(‘天王蓋地虎\n小雞燉蘑菇‘)

C:\python\python.exe C:/python.py/yuanzu.py

天王蓋地虎

小雞燉蘑菇


python中的轉義字符

轉義字符 描述

\(在行尾時) 持續行

\\ 反斜杠符號

\‘ 單引號

\" 雙引號

\a 響鈴

\b 退格(Backspace) 行

\e 轉義

\000 空

\n 換行

\v 縱向制表符

\t 橫向制表符

\r 回車

\f 換頁

\oyy 八進制數,yy代表的字符,如\o12代表換行

\xyy 十六進制數,yy代表的字符,如\x0代表換行

\other 其他字符以普通格式輸出

字符串格式化

字符串格式化符

字符串格式是使用操作符百分號(%)實現的。

%也可以用作模運(求余)操作符。

例如:

print(‘hello,%s‘%‘world‘)

C:\python\python.exe C:/python.py/zifuchuan.py

hello,world

%左邊放了一個待格式化的字符串,右邊放置的是希望格式化的值。格式化的值可以是一個字符串或數字。

在例如:

print(‘徐偉今年幾%s歲了‘%18)

C:\python\python.exe C:/python.py/zifuchuan.py

徐偉今年幾18歲了

格式化字符串的%s部分稱為轉換說明符,標記了需要放置轉換值的位置,通用術語為占用符。

上例s表示百分號右邊的值會被格式化為字符串,s指的是str。如果不是字符串就會使用str將其轉換為字符串。


字符串格式化符

符號 描述 符號 描述

%c 格式化符及其ASCII碼 %f 格式化浮點數字,可指定精度值

%s 格式化字符串 %e 用科學計數法格式化浮點數

%d 格式化整數 %E 作用同%e,用科學計數法格式化浮點數

%u 格式化無符號整形 %g %e和%f的簡寫

%o 格式化無符號八進制數 %G %f和%E的簡寫

%x 格式化無符號十六進制數 %p 用十六進制數格式化變量的地址

%X 格式化無符號十六進制數 (大寫)


示例:使用%d格式化整數

print(‘徐偉今年幾%d歲了‘%18.9)

C:\python\python.exe C:/python.py/zifuchuan.py

徐偉今年幾18歲了

示例:使用%f格式化浮點數,可指定精確值

print(‘圓周率PI的值為:%f‘%3.14)

C:\python\python.exe C:/python.py/zifuchuan.py

圓周率PI的值為:3.140000

註意:使用%f的時候,如果不指定精度則默認

如果要精確到兩位小數點,就要進行指定了

print(‘圓周率PI的值為:%.2f‘%3.14)

C:\python\python.exe C:/python.py/zifuchuan.py

圓周率PI的值為:3.14

指定精度的格式為一個句點加上希望保留的小數位,如上例中的%.2f就是保留2位小數

解決一個實際問題,輸出類似於1.23%這樣的數(也就是百分比)

舉個小例子:公司今年的市值同比去年上升了1.23%\

print(‘公司今年的市值同比去年上升了:%.2f%%‘%1.23)

C:\python\python.exe C:/python.py/zifuchuan.py

公司今年的市值同比去年上升了:1.23%

字符中的百分號是轉換說明符,如果想要輸出%(百分比),就需要格式化字符%,從而就需要使用%%。

例如:

print(‘輸出百分號:%s‘%‘%‘)

C:\python\python.exe C:/python.py/zifuchuan.py

輸出百分號:%


字符串格式化元組

格式化操作符的右鍵操作數可以是元素。

如果操作數是元組,其中每一個元素都會被單獨格式化,每個值都需要一個對應的轉換說明符。

例如:

print(‘今天是%s月%s號,我們晚上出去吃%s,一共花了%d元‘%(‘8‘,‘24‘,‘烤魚‘,123))

C:\python\python.exe C:/python.py/zifuchuan.py

今天是8月24號,我們晚上出去吃烤魚,一共花了123元

在有多個占位符的字符串中,可以使用元組傳入多個格式化值。

註意:如果需要轉換元組作為轉換表達式的一部分存在,就必須將它使用圓括號括起來,否則就會出錯。

使用列表或其他序列代表元組,序列就會被解釋為一個值。只有元組和字典可以格式化一個以上的值。


基本轉換說明符(這些項的順序是非常重要的)

%字符:標記轉換說明符開始。

轉換標誌(可選):-表示對對齊;+表示在轉換值之前要加上正負號;""(空白字符)表示正數之前保留空格;0表示轉換值位數不夠是用填充。

最小字段的寬度(可選):轉換後的字符串至少應該具有該值指定的寬度。如果是*,寬度就會從元組中讀出。

點(.)後面跟精度值(可選):如果後面是實數,精度值表示出現在小數點後的位數;如果轉換的是字符串,該數字就表示最大字段的寬度;如果是*,精度就會從元組中轉換出來。


簡單轉換

例如:

print(‘今天逛商場花了多少錢:%.2f‘%12345.1537)

C:\python\python.exe C:/python.py/zifuchuan.py

今天逛商場花了多少錢:12345.15

print(‘買了一個蘋果7PLUS花了$%d元.‘%7888)

C:\python\python.exe C:/python.py/zifuchuan.py

買了一個蘋果7PLUS花了$7888元.


字段寬度和精度

轉換說名符包括字段寬度和精度。字段寬度是轉換後的值所有保留的最小字符個數,精度是數字轉換後結果中應該包含的小數位數或字符串轉換後的值所能包含的最大字符的個數。

例如:

#字段寬度為10

print(‘圓周率PI的值為:%10f‘%3.141593)

C:\python\python.exe C:/python.py/zifuchuan.py

圓周率PI的值為: 3.141593

字符串寬度為10,被字符串占據8個空格,還剩2個

#字段寬度為10

print(‘圓周率PI的值為:%10.2f‘%3.141593)

C:\python\python.exe C:/python.py/zifuchuan.py

圓周率PI的值為: 3.1

字符串寬度為10,被字符串占據4個空格,還剩6個

#打印出前字符串前5個

print(‘字符串精度獲取:%.5s‘%(‘du yu heng‘))

C:\python\python.exe C:/python.py/zifuchuan.py

字符串精度獲取:du yu

字段寬度和精度都是整數,並通過點號(.)分隔。兩個都是可選參數,如果給出精度,就必須包涵點號。

可以使用*作為字段寬度或精度(兩者都可以用*),數值會從元組中讀出。

例如:

print(‘從元組中獲取字符串精度:%*.*s‘%(10,5,‘hello world‘))

C:\python\python.exe C:/python.py/zifuchuan.py

從元組中獲取字符串精度: hello

print(‘從元組中獲取字符串精度為5:%.*s‘%(5,‘hello world‘))

C:\python\python.exe C:/python.py/zifuchuan.py

從元組中獲取字符串精度為5:hello

可以使用*作為字段寬度或精度(兩者都可以使用),數值會從元組中讀出。


符號、對齊和0填充

在字段寬度和精度之前可以放置一個"標表"零表示用零進行填充。

例如:

print(‘圓周率PI的值為:%010.2f‘%3.141593)

C:\python\python.exe C:/python.py/zifuchuan.py

圓周率PI的值為:0000003.14

使用減號用來對齊數值

例如:

print(‘圓周率PI的值為:%-10.2f‘%3.141593)

C:\python\python.exe C:/python.py/zifuchuan.py

圓周率PI的值為:3.14 #後面有6個空格可以使用光標檢測

使用減號時,數字右側多出了額外的空格

空白("")表示在正數前面,加上空格

例如:

print(("%5d"%10)+‘\n‘+("%5d"%-10))

C:\python\python.exe C:/python.py/zifuchuan.py

10

-10

上例操作也可以用於對齊正負數

加號表示無論是正數還是負數都表示出符號

例如:

print((‘寬度前面加加號:%+5d‘%10)+‘\n‘+(‘寬度前面加減號:%+5d‘%-10))

C:\python\python.exe C:/python.py/zifuchuan.py

寬度前面加加號: +10

寬度前面加減號: -10

上例操作也可以用於數值對齊。


字符串方法


find()方法

find()方法用於檢測字符串中是否包涵子字符串str。如果指定beg(開始)和end(結束)範圍,就檢查是否包含在指定範圍內。如果包含子字符串,就返回索引值;否則返回-1。

find()方法的語法如下:

str.find(str,beg=0,end=len(string))

str代表指定檢測的字符串,beg代表開始索引,默認為0;end代表結束索引,默認為該字符串的長度。 返回結果為子串所在位置的最左端索引,如果沒有找到,就返回-1.


find()方法演示:

field=‘do it now‘
print(field.find(‘do‘))
print(field.find(‘now‘))
print(field.find(‘python‘))

C:\python\python.exe C:/python.py/zifuchuan.py

0

6

-1

註意:字符串的find方法返回的不是布爾值。如果返回0,就表示在索引0處找到了子字符串。

find方法還可以接受參數,用於表示起始點和結束點

例如:

field=‘do it now‘
print(‘提供起點2輸出索引位置為:‘,field.find(‘it‘,2))
print(‘提供起點5輸出索引位置為:‘,field.find(‘it‘,5))
print(‘提供起點0和終點3輸出索引位置為:‘,field.find(‘it‘,0,3))
print(‘提供起點0和終點5輸出索引位置為:‘,field.find(‘it‘,0,5))
print(‘提供起點5和終點10輸出索引位置為:‘,field.find(‘it‘,5,10))

C:\python\python.exe C:/python.py/zifuchuan.py

提供起點2輸出索引位置為: 3

提供起點5輸出索引位置為: -1

提供起點0和終點3輸出索引位置為: -1

提供起點0和終點5輸出索引位置為: 3

提供起點5和終點10輸出索引位置為: -1

通過使用起始值和終止值查找指定的範圍內是否存在指定字符串。


join()方法

join()方法用於將序列中的元素一指定的字符連接成一個新的字符串。

join()方法的語法如下:

str.join(sequence)

str代表指定檢索的字符串,sequence代表要連接的元素序列,返回結果為指定字符連接序列中元素後生成的新字符串。

join()方法演示:

field=[‘1‘,‘2‘,‘3‘,‘4‘,‘5‘]
print(‘用+連接字符串列表:‘,‘+‘.join(field))

C:\python\python.exe C:/python.py/zifuchuan.py

用+連接字符串列表: 1+2+3+4+5

連接元組

dirs= (‘home‘,‘data‘,‘tmp‘)
print(‘路徑:‘,‘/‘.join(dirs))

C:\python\python.exe C:/python.py/zifuchuan.py

路徑: home/data/tmp

註意:進行join操作調用和被調用的對象必須都是字符串,任意一個不是字符串的都會報錯。


lower()方法

lower()方法用於將字符串中所有大寫轉換為小寫。

lower()方法的語法如下:

str.lower()

str代表指定檢索的字符串,不需要參數。返回結果為字符串中所有大寫字符串轉換為小寫字符串。

lower()方法演示:

name=‘DUYUHENG‘
print(‘調用lower得到字符串:‘,name.lower())

C:\python\python.exe C:/python.py/zifuchuan.py

調用lower得到字符串: duyuheng

如果想要找在一個字符串中查找某個子字符並忽略大小寫,也可以使用lower()方法

例如:

name=‘DUYUHENG‘
print(name.lower().find(‘Yu‘.lower()))

C:\python\python.exe C:/python.py/zifuchuan.py

2

註意:對於英文字符串,lower()方法在處理時一點問題都沒有,對於非英文處理效果就一般了


upper()方法

upper()方法用於將字符串中所有小寫轉換為大寫。

upper()方法語法如下:

str.upper()

str代表指定檢索的字符串,不需要參數。返回結果為小寫字母字符串轉換為大寫字母字符串。

upper()方法演示:

name=‘duyuheng‘
print(‘調用upper得到字符串:‘,name.upper())

C:\python\python.exe C:/python.py/zifuchuan.py

調用upper得到字符串: DUYUHENG

如果想要找在一個字符串中查找某個子字符並忽略大小寫,也可以使用upper()方法

例如:

name=‘duyuheng‘
print(name.upper().find(‘Yu‘.upper()))

C:\python\python.exe C:/python.py/zifuchuan.py

2


swapcase()方法

swapcase()方法用於對字符串的大小寫字母進行轉換,將字符串中大寫轉換為小寫、小寫轉換為大寫

swapcase()方法語法如下:

str.swapcase()

str代表指定檢索的字符串,不需要參數。返回結果為大小寫字母轉換後生成的新字符串。

swapcase()方法演示:

name=‘du YU heng‘
print(‘原字符串:‘,name)
print(‘調用swapcase方法後得到的字符串:‘,name.swapcase())

C:\python\python.exe C:/python.py/zifuchuan.py

原字符串: du YU heng

調用swapcase方法後得到的字符串: DU yu HENG


replace()方法

replace()方法把字符串中的old(舊字符串)替換成new(新字符串),如果指定第三個參數max,替換次數就max次.

replace()方法語法如下:

str.replace(old,new[,max])

str代表指定檢索的字符串;old代表將被替換的子字符串;new代表新字符串,用於替換old子字符串;max代表可選字符串,代替次數不超過max次。返回結果為字符串中的old(舊字符串)替換成new(新字符串)後生成的新字符串,如果指定3個參數max,替換次數就不超過max次。

replace()方法演示:

field =‘do it now,do right now‘
print(‘原有字符串:‘,field)
print(‘新字符串:‘,field.replace(‘do‘,‘Just do‘))
print(‘新字符串:‘,field.replace(‘o‘,‘Just‘,1))
print(‘新字符串:‘,field.replace(‘o‘,‘Just‘,2))
print(‘新字符串:‘,field.replace(‘o‘,‘Just‘,3))

C:\python\python.exe C:/python.py/zifuchuan.py

原有字符串: do it now,do right now

新字符串: Just do it now,Just do right now

新字符串: dJust it now,do right now

新字符串: dJust it nJustw,do right now

新字符串: dJust it nJustw,dJust right now

當不指定第3個參數時,所有匹配字符都替換;指定第三個字符時,替換從左往右進行,替換次數不超過指定次數。


split()方法

split()方法 通過指定分隔符對字符串進行切片,如果參數num有指定值,就只分隔num個子字符。是join的逆方法,用來將字符串分

split()方法語法如下:

str.split(st="",num=string.count(str))

str代表指定檢索的字符串;st代表分隔符,默認為空格;num代表分割次數。返回結果為分割後的字符串列表。

split()方法演示:

field = ‘do it now‘
print(‘不提供任何分割符後分隔的字符串:‘,field.split())
print(‘根據i分隔後的字符串:‘,field.split(‘i‘))
print(‘根據o分隔後的字符串:‘,field.split(‘o‘))
print(‘根據o分隔1次後的字符串:‘,field.split(‘o‘,1))

C:\python\python.exe C:/python.py/zifuchuan.py

不提供任何分割符後分隔的字符串: [‘do‘, ‘it‘, ‘now‘]

根據i分隔後的字符串: [‘do ‘, ‘t now‘]

根據o分隔後的字符串: [‘d‘, ‘ it n‘, ‘w‘]

根據o分隔1次後的字符串: [‘d‘, ‘ it now‘]

如果不提供分隔符,程序會把所有的空格作為分割符。

操作過程中可以指定分隔符和分割的次數,若不指定分割次數,則從左往右檢索和分隔匹配的字符,分割次數不超過指定次數;

若不指定分割次數,則所有匹配的字符串都會被分割。


strip()方法

strip()方法方法用於移除字符串頭尾指定的字符(默認為空格)。

strip()方法的語法如下:

str.strip([chars])

str代表指定檢索的字符串;chars代表的移除字符串頭尾指定的字符,返回結果為移除字符串頭尾指定的字符生成的新字符串。

strip()方法演示:

name = ‘----du yu heng----‘
print(‘原字符串:‘,name)
print(‘新字符串:‘,name.strip(‘-‘))
st = ‘----du--yu--heng----‘
print(‘原字符串:‘,st)
print(‘新字符串:‘,st.strip(‘-‘))

C:\python\python.exe C:/python.py/zifuchuan.py

原字符串: ----du yu heng----

新字符串: du yu heng

原字符串: ----du--yu--heng----

新字符串: du--yu--heng

從上例可以看出strip()方法指去除頭尾匹配的字符,中間匹配的字符不會去除。


translate()方法

translate()方法根據參數table給出的表(包含256個字符)轉換字符串的字符,將要過濾掉的字符放的del參數中。

translate()方法語法如下:

str.translate(table[,deletechars]) str代表指定檢索的字符串;table代表翻譯表,翻譯表通過maketrans方法轉換而來;deletechars代表字符串中要過濾的字符列表。返回結果為翻譯後的字符串。

translate()方法演示(這個比較難懂);

intab = ‘adfas‘
outtab = ‘12345‘
trantab = str.maketrans(intab,outtab)
st = ‘just do it‘
print(‘st調用translate方法後:‘,st.translate(trantab))

C:\python\python.exe C:/python.py/zifuchuan.py

st調用translate方法後: ju5t 2o it

註意:前兩個maketrans參數必須具有相同的長度也就是(initab和outtab值的長度必須一樣)

translate()方法和replace()方法可以替換字符串中某些部分。

replace()方法只處理單個字符。

translate()方法的優勢在於可以同時進行多個替換,有時比replace()方法效率高的多。


本文出自 “duyuheng” 博客,謝絕轉載!

python3.5修煉手冊9