2021-05-12 14:32:11
python字串常規操作大全
拼接字串
- 使用「+」運運算元可完成對多個字串的拼接,「+」運運算元可以連線多個字串併產生一個字串物件。
- 字串不允許直接與其他型別資料拼接。
- 如果要用來和其他型別拼接,先用str()函數轉換成字串型別。
str1 = 'Hello World' str2 = '你好,世界' print(str1+str2) num = 2021 print(str1+str2+str(num))
計算字串長度
由於不同的字元所佔位元組數不同,所以要計算字串長度,需先了解字元所佔位元組數。在python中,數位、英文、小數點、下劃線和空格佔一個位元組:一個漢字可能佔2-4個位元組,具體根據採用的編碼決定。漢子在GBK/GB2312編碼中佔2個位元組,UTF-8/Unicode編碼中一般佔用3或4個位元組。python預設為UTF-8編碼,一般一個漢字佔3個位元組。
str1 = '人生苦短,我用python!' print(len(str1)) #結果為14
預設情況下,len函數計算字串長度,不區分英文、數位和漢字,所有字元按一個字元計算。
注:
在實際開發中,有時需要獲取字串實際所佔位元組數,這時可以使用encode()方法進行編碼後獲取。
str1 = '人生苦短,我用python!' print(len(str1.encode())) #UTF-8結果為28 print(len(str1.encode('gbk'))) #gbk結果為21
擷取字串
語法格式:string[start : end : step]
string:表示擷取的字串;
start:表示要擷取的第一個索引(包括該字元),沒用預設為0;
end:表示要擷取的最好一個字元的索引(不包括該字元),沒有預設字串長度;
step:表示切片的步長,如果省略,預設為1;
進行擷取時,如果指定索引不存在,則會丟擲異常。
programer_1 = '你知道我的生日嗎?' # 程式設計師甲問程式設計師乙的臺詞 print('程式設計師甲說:',programer_1) # 輸出程式設計師甲的臺詞 programer_2 = '輸入你的身份證號碼。' # 程式設計師乙的臺詞 print('程式設計師乙說:',programer_2) # 輸出程式設計師乙的臺詞 idcard = '123456199006277890' # 定義儲存身份證號碼的字串 print('程式設計師甲說:',idcard) # 程式設計師乙說出身份證號碼 birthday = idcard[6:10] + '年' + idcard[10:12] + '月' + idcard[12:14] + '日' # 擷取生日 print('程式設計師乙說:','你是' + birthday + '出生的,所以你的生日是' + birthday[5:]) # 輸出程式設計師乙的生日
分割字串
語法格式:string.split(sep,maxsplit)
string:指定要分割的字串;
sep:指定分隔符,可以包含多個字元,預設為None,即空字元(包括空格、換行「n」,製表符「t」等);
maxsplit:可選引數,用於指定分割的次數,如果不指定或者為-1,則分割次數沒用限制,否則返回結果的元素個數,個數最多為maxsplit+1;
返回值是字串列表;
str1 = '分割一個字串 >>> http://www.baidu.com' print('原字串:',str1) list1 = str1.split() list2 = str1.split('>>>') list3 = str1.split('.') list4 = str1.split(' ',4) #用空格進行分割,只分割前4個空格 print(str(list1)+'n'+str(list2)+'n'str(list3)+'n'str(list4)) list5 = str1.split('>') print(list5)
合併字串
語法格式:strnew = string.join(iterable)
strnew:表示合併生成的新字串;
string:字串型別,用於指定合併時的分隔符;
iterable: 可迭代物件,比如列表,字串,元組等。
list_friend = ['扎克伯格','俞敏洪','馬雲','馬化騰'] # 好友列表 str_friend = ' @'.join(list_friend) # 用空格+@符號進行連線 at = '@'+str_friend # 由於使用join()方法合併時,第一個元素前不加分隔符,所以需要在前面加上@符號 print('您要@的好友:',at)
檢索字串
語法格式:str.count(sub[,start[,end]])
用於檢索指定字串在另一個字串中出現的次數
str:表示原字串;
sub:表示要檢索的子字串;
start:可選引數,表示檢索範圍的起始位置的索引,如果不指定,則從頭開始檢索;
end:可選引數,表示檢索範圍的結束位置的索引,如果不指定,則一直檢索打末尾。
find()方法
語法格式:str.find(sub[,start[,end]])
用於檢索是否包含指定的子字串。
str:表示原字串;
sub:表示要檢索的子字串;
start:可選引數,表示檢索範圍的起始位置的索引,如果不指定,則從頭開始檢索;
end:可選引數,表示檢索範圍的結束位置的索引,如果不指定,則一直檢索打末尾。
補充:
如果只需要判斷存在可以不用find用in,如果沒找到則會返回-1,如果想從右邊往左邊找,可以用rfind()方法。
index()方法
語法格式:str.index(sub[,start[,end]])
index()方法和find()方法類似,用於檢索是否包含指定的子字串,區別是如果不存在會丟擲
str:表示原字串;
sub:表示要檢索的子字串;
start:可選引數,表示檢索範圍的起始位置的索引,如果不指定,則從頭開始檢索;
end:可選引數,表示檢索範圍的結束位置的索引,如果不指定,則一直檢索打末尾。
startswith()方法
語法格式:str.startswith(sub[,start[,end]])
用於檢索字串是否是以指定子字串開頭,是返回True,不是返回False
str:表示原字串;
sub:表示要檢索的子字串;
start:可選引數,表示檢索範圍的起始位置的索引,如果不指定,則從頭開始檢索;
end:可選引數,表示檢索範圍的結束位置的索引,如果不指定,則一直檢索打末尾索打末尾。
endswith()方法
語法格式:str.endswith(sub[,start[,end]])
用於檢索字串是否是以指定子字串結尾,是返回True,不是返回False
str:表示原字串;
sub:表示要檢索的子字串;
start:可選引數,表示檢索範圍的起始位置的索引,如果不指定,則從頭開始檢索;
end:可選引數,表示檢索範圍的結束位置的索引,如果不指定,則一直檢索打末尾。
去除字串中空格和特殊字元
strip()方法
用於去除字串兩側的空格和特殊字元。
lstrip()方法
用於去除字串左側的空格和特殊字元。
rstrip()方法
用於去除字串右側的空格和特殊字元。
特殊字元指:
製表符t,回車符 r 、 換行符n等。
格式化字串格式一
格式化字串是指先指定一個模板,在這個模板中預留幾個空位,然後根據需要填上相應的內容。這些空位需要通過指定的符號標記(也稱為站位符),而這些符號還不會顯示出來。
使用「%」操作符
語法格式:'%[-][+][0][m][.n]格式化字元'%exp (注意別漏了單引號)
-:可選引數,用於指定左對齊,正數前方無符號,負數前面加負號;
+:可選引數,用於指定右對齊,正數前方加正號,負數前面加負號;
0:可選引數,表示右對齊,正數前方無符號,負數前方加負號,用0填充空白處(一般與m引數一起使用);
m:可選引數,表示佔有寬度;
n:可選引數,表示小數點後保留的位數;
格式化字元:用於指定型別;
exp:要轉換的項,如果要指定多個,需要通過元組,但不能用列表。
常用格式化字串
範例
template = '編號:%09dt公司名稱: %st官網:http://www.%s.com' context1 = (7,'百度','baidu') context2 = (8,'新浪','sina') print(template%context1) print(template%context2)
格式化字串格式二(常用)
現在大部分不怎麼使用%方法,而是使用第二種format物件來實現格式化。
使用字串物件的format()方法
語法格式:template.format(args)
template:用於指定字串的顯示樣式(即模板)的字串
args:用於指定要轉換的項,如果有多項,則用逗號進行分割。
建立模板時,需要使用「{}」和「:」指定預留位置
語法格式:{[index][:[[fill]align][sign][#][width][.precision][type]]}
index:可選引數,用於指定要設定格式物件在參數列中的索引位置
fill:可選引數,指定空白處填充的字元
align:可選引數,用於指定對齊方式(「<」:左對齊,「>」:右對齊,「=」:右對齊,只對數位有效,「^」:表示居中和
width一起使用。)
sign:可選引數,用於指定有無符號數(正數,負數)
#:可選引數,對二進位制數,八進位制數,和十六進位制數,加上#會顯示0b/0o/0x字首
width:可選引數,用於指定寬度
.precision可選引數,用於指定保留的小數位數
type:可選引數,用於指定型別
範例
import math # 匯入Python的數學模組 print('1251+3950的結果是(以貨幣形式顯示):¥{:,.2f}元'.format(1251+3950)) # 以貨幣形式顯示 print('{0:.1f}用科學計數法表示:{0:E}'.format(120000.1)) # 用科學計數法表示 print('π取5位小數:{:.5f}'.format(math.pi)) # 輸出小數點後五位 print('{0:d}的16進位制結果是:{0:#x}'.format(100)) # 輸出十六進位制數 print('天才是由 {:.0%} 的靈感,加上 {:.0%} 的汗水 。'.format(0.01,0.99)) # 輸出百分比,並且不帶小數
字串編碼轉換
最早的字串編碼時美國標準資訊交換嗎,即ASCII碼。它僅有10個數位,26個大小寫字母,26個小寫英文字母及一些其他符號進行編碼。ASCII碼最多隻能表示256個符號,每個字元佔一個位元組。GBK和GB2312是我國制定的中文編碼規則,使用一個位元組表示英文字母,2個位元組表示中文。UTF-8是國際通用編碼,對全世界所有國家需要用到的字元都進行了編碼。UTF-8採用一個位元組表示英文,3個位元組表示中文。
在python中,有兩種常用的字串型別,分別問str和bytes。其中str表示Unicode字元即ASCII;bytes表示二進位制資料。這兩種型別的字串不能拼接在一起使用。通常情況下,str在記憶體中以Unicode表示,一個字元對應若干個位元組。但是如果在網路傳輸,或者儲存到硬碟,就需要str轉換成位元組型別即bytes。
bytes型別的資料是帶有b字首的字串(用單引號或雙引號)
例如:b'xd2xb0 和b'mr'都是bytes型別
str型別和bytes型別可以用encode()和decode()方法相互轉換
使用encode()方法編碼
encode()方法為str物件的方法,用於將字串轉換為二進位制資料(即bytes),也稱為「編碼」。
語法格式:str.encode([encoding= 「utf-8」][,errors= 「strict」]
- str:表示要進行轉換的字串;
- encoding = 「utf-8」:可選引數,用於指定進行轉碼時採用的字元編碼,預設為UTF-8,如果想使用簡體中文,也可以設定為gb2312。當只有這一個引數時,也可以省略前面的「encoding=」,直接寫編碼;
- errors = 「strict」:可選引數,用於指定錯誤處理方式,其可選擇值可以是strict(遇到非法字元就丟擲異常)、ignore(忽略非法字元)、replace(用「?」替換非法字元)或xmlcharrefreplace(使用xml的字元參照)等,預設值為strict。
範例
verse = '野渡無人舟自橫' byte = verse.encode('GBK') # 採用GBK編碼轉換為二進位制,不處理異常 print('原字串:',verse) # 輸出原字串(沒有改變) print('轉換後:',byte) # 輸出轉換後的二進位制資料,如果用UTF-8來轉換呢?
使用decode()方法解碼
decode()方法為bytes物件的方法用於將二進位制資料轉換為字串,即將使用encode()方法轉換的結果在轉換為字串,也稱為「解碼」
語法格式:bytes.decode([encoding= 「utf-8」][,errors= 「strict」]
- bytes:表示要進行轉換的二進位制資料,通常是encode()方法轉換的結果
- encoding = 「utf-8」:可選引數,用於指定進行轉碼時採用的字元編碼,預設為UTF-8,如果想使用簡體中文,也可以設定為gb2312。當只有這一個引數時,也可以省略前面的「encoding=」,直接寫編碼。
- errors = 「strict」:可選引數,用於指定錯誤處理方式,其可選擇值可以是strict(遇到非法字元就丟擲異常)、ignore(忽略非法字元)、replace(用「?」替換非法字元)或xmlcharrefreplace(使用xml的字元參照)等,預設值為strict。
範例
verse = '野渡無人舟自橫' byte = verse.encode('GBK') # 採用GBK編碼轉換為二進位制,不處理異常 print('原字串:',verse) # 輸出原字串(沒有改變) print('轉換後:',byte) # 輸出轉換後的二進位制資料,如果用UTF-8來轉換呢? print('解碼後:',byte.decode('GBK')) # 對二進位制資料進行解碼
總結
到此這篇關於python字串常規操作大全的文章就介紹到這了,更多相關python字串操作內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章