拼接字符串
- 使用“+”運(yùn)算符可完成對(duì)多個(gè)字符串的拼接,“+”運(yùn)算符可以連接多個(gè)字符串并產(chǎn)生一個(gè)字符串對(duì)象。
- 字符串不允許直接與其他類型數(shù)據(jù)拼接。
- 如果要用來(lái)和其他類型拼接,先用str()函數(shù)轉(zhuǎn)換成字符串類型。
str1 = 'Hello World'
str2 = '你好,世界'
print(str1+str2)
num = 2021
print(str1+str2+str(num))
計(jì)算字符串長(zhǎng)度
由于不同的字符所占字節(jié)數(shù)不同,所以要計(jì)算字符串長(zhǎng)度,需先了解字符所占字節(jié)數(shù)。在python中,數(shù)字、英文、小數(shù)點(diǎn)、下劃線和空格占一個(gè)字節(jié):一個(gè)漢字可能占2-4個(gè)字節(jié),具體根據(jù)采用的編碼決定。漢子在GBK/GB2312編碼中占2個(gè)字節(jié),UTF-8/Unicode編碼中一般占用3或4個(gè)字節(jié)。python默認(rèn)為UTF-8編碼,一般一個(gè)漢字占3個(gè)字節(jié)。
str1 = '人生苦短,我用python!'
print(len(str1)) #結(jié)果為14
默認(rèn)情況下,len函數(shù)計(jì)算字符串長(zhǎng)度,不區(qū)分英文、數(shù)字和漢字,所有字符按一個(gè)字符計(jì)算。
注:
在實(shí)際開(kāi)發(fā)中,有時(shí)需要獲取字符串實(shí)際所占字節(jié)數(shù),這時(shí)可以使用encode()方法進(jìn)行編碼后獲取。
str1 = '人生苦短,我用python!'
print(len(str1.encode())) #UTF-8結(jié)果為28
print(len(str1.encode('gbk'))) #gbk結(jié)果為21
截取字符串
語(yǔ)法格式:string[start : end : step]
string:表示截取的字符串;
start:表示要截取的第一個(gè)索引(包括該字符),沒(méi)用默認(rèn)為0;
end:表示要截取的最好一個(gè)字符的索引(不包括該字符),沒(méi)有默認(rèn)字符串長(zhǎng)度;
step:表示切片的步長(zhǎng),如果省略,默認(rèn)為1;
進(jìn)行截取時(shí),如果指定索引不存在,則會(huì)拋出異常。
programer_1 = '你知道我的生日嗎?' # 程序員甲問(wèn)程序員乙的臺(tái)詞
print('程序員甲說(shuō):',programer_1) # 輸出程序員甲的臺(tái)詞
programer_2 = '輸入你的身份證號(hào)碼。' # 程序員乙的臺(tái)詞
print('程序員乙說(shuō):',programer_2) # 輸出程序員乙的臺(tái)詞
idcard = '123456199006277890' # 定義保存身份證號(hào)碼的字符串
print('程序員甲說(shuō):',idcard) # 程序員乙說(shuō)出身份證號(hào)碼
birthday = idcard[6:10] + '年' + idcard[10:12] + '月' + idcard[12:14] + '日' # 截取生日
print('程序員乙說(shuō):','你是' + birthday + '出生的,所以你的生日是' + birthday[5:]) # 輸出程序員乙的生日
分割字符串
語(yǔ)法格式:string.split(sep,maxsplit)
string:指定要分割的字符串;
sep:指定分隔符,可以包含多個(gè)字符,默認(rèn)為None,即空字符(包括空格、換行“\n”,制表符“\t”等);
maxsplit:可選參數(shù),用于指定分割的次數(shù),如果不指定或者為-1,則分割次數(shù)沒(méi)用限制,否則返回結(jié)果的元素個(gè)數(shù),個(gè)數(shù)最多為maxsplit+1;
返回值是字符串列表;
str1 = '分割一個(gè)字符串 >>> http://www.baidu.com'
print('原字符串:',str1)
list1 = str1.split()
list2 = str1.split('>>>')
list3 = str1.split('.')
list4 = str1.split(' ',4) #用空格進(jìn)行分割,只分割前4個(gè)空格
print(str(list1)+'\n'+str(list2)+'\n'str(list3)+'\n'str(list4))
list5 = str1.split('>')
print(list5)
合并字符串
語(yǔ)法格式:strnew = string.join(iterable)
strnew:表示合并生成的新字符串;
string:字符串類型,用于指定合并時(shí)的分隔符;
iterable: 可迭代對(duì)象,比如列表,字符串,元組等。
list_friend = ['扎克伯格','俞敏洪','馬云','馬化騰'] # 好友列表
str_friend = ' @'.join(list_friend) # 用空格+@符號(hào)進(jìn)行連接
at = '@'+str_friend # 由于使用join()方法合并時(shí),第一個(gè)元素前不加分隔符,所以需要在前面加上@符號(hào)
print('您要@的好友:',at)
檢索字符串
語(yǔ)法格式:str.count(sub[,start[,end]])
用于檢索指定字符串在另一個(gè)字符串中出現(xiàn)的次數(shù)
str:表示原字符串;
sub:表示要檢索的子字符串;
start:可選參數(shù),表示檢索范圍的起始位置的索引,如果不指定,則從頭開(kāi)始檢索;
end:可選參數(shù),表示檢索范圍的結(jié)束位置的索引,如果不指定,則一直檢索打末尾。
find()方法
語(yǔ)法格式:str.find(sub[,start[,end]])
用于檢索是否包含指定的子字符串。
str:表示原字符串;
sub:表示要檢索的子字符串;
start:可選參數(shù),表示檢索范圍的起始位置的索引,如果不指定,則從頭開(kāi)始檢索;
end:可選參數(shù),表示檢索范圍的結(jié)束位置的索引,如果不指定,則一直檢索打末尾。
補(bǔ)充:
如果只需要判斷存在可以不用find用in,如果沒(méi)找到則會(huì)返回-1,如果想從右邊往左邊找,可以用rfind()方法。
index()方法
語(yǔ)法格式:str.index(sub[,start[,end]])
index()方法和find()方法類似,用于檢索是否包含指定的子字符串,區(qū)別是如果不存在會(huì)拋出
str:表示原字符串;
sub:表示要檢索的子字符串;
start:可選參數(shù),表示檢索范圍的起始位置的索引,如果不指定,則從頭開(kāi)始檢索;
end:可選參數(shù),表示檢索范圍的結(jié)束位置的索引,如果不指定,則一直檢索打末尾。
startswith()方法
語(yǔ)法格式:str.startswith(sub[,start[,end]])
用于檢索字符串是否是以指定子字符串開(kāi)頭,是返回True,不是返回False
str:表示原字符串;
sub:表示要檢索的子字符串;
start:可選參數(shù),表示檢索范圍的起始位置的索引,如果不指定,則從頭開(kāi)始檢索;
end:可選參數(shù),表示檢索范圍的結(jié)束位置的索引,如果不指定,則一直檢索打末尾索打末尾。
endswith()方法
語(yǔ)法格式:str.endswith(sub[,start[,end]])
用于檢索字符串是否是以指定子字符串結(jié)尾,是返回True,不是返回False
str:表示原字符串;
sub:表示要檢索的子字符串;
start:可選參數(shù),表示檢索范圍的起始位置的索引,如果不指定,則從頭開(kāi)始檢索;
end:可選參數(shù),表示檢索范圍的結(jié)束位置的索引,如果不指定,則一直檢索打末尾。
去除字符串中空格和特殊字符
strip()方法
用于去除字符串兩側(cè)的空格和特殊字符。
lstrip()方法
用于去除字符串左側(cè)的空格和特殊字符。
rstrip()方法
用于去除字符串右側(cè)的空格和特殊字符。
特殊字符指:
制表符\t,回車符 \r 、 換行符\n等。
格式化字符串格式一
格式化字符串是指先指定一個(gè)模板,在這個(gè)模板中預(yù)留幾個(gè)空位,然后根據(jù)需要填上相應(yīng)的內(nèi)容。這些空位需要通過(guò)指定的符號(hào)標(biāo)記(也稱為站位符),而這些符號(hào)還不會(huì)顯示出來(lái)。
使用“%”操作符
語(yǔ)法格式:'%[-][+][0][m][.n]格式化字符'%exp (注意別漏了單引號(hào))
-:可選參數(shù),用于指定左對(duì)齊,正數(shù)前方無(wú)符號(hào),負(fù)數(shù)前面加負(fù)號(hào);
+:可選參數(shù),用于指定右對(duì)齊,正數(shù)前方加正號(hào),負(fù)數(shù)前面加負(fù)號(hào);
0:可選參數(shù),表示右對(duì)齊,正數(shù)前方無(wú)符號(hào),負(fù)數(shù)前方加負(fù)號(hào),用0填充空白處(一般與m參數(shù)一起使用);
m:可選參數(shù),表示占有寬度;
n:可選參數(shù),表示小數(shù)點(diǎn)后保留的位數(shù);
格式化字符:用于指定類型;
exp:要轉(zhuǎn)換的項(xiàng),如果要指定多個(gè),需要通過(guò)元組,但不能用列表。
常用格式化字符串
實(shí)例
template = '編號(hào):%09d\t公司名稱: %s\t官網(wǎng):http://www.%s.com'
context1 = (7,'百度','baidu')
context2 = (8,'新浪','sina')
print(template%context1)
print(template%context2)
格式化字符串格式二(常用)
現(xiàn)在大部分不怎么使用%方法,而是使用第二種format對(duì)象來(lái)實(shí)現(xiàn)格式化。
使用字符串對(duì)象的format()方法
語(yǔ)法格式:template.format(args)
template:用于指定字符串的顯示樣式(即模板)的字符串
args:用于指定要轉(zhuǎn)換的項(xiàng),如果有多項(xiàng),則用逗號(hào)進(jìn)行分割。
創(chuàng)建模板時(shí),需要使用“{}”和“:”指定占位符
語(yǔ)法格式:{[index][:[[fill]align][sign][#][width][.precision][type]]}
index:可選參數(shù),用于指定要設(shè)置格式對(duì)象在參數(shù)列表中的索引位置
fill:可選參數(shù),指定空白處填充的字符
align:可選參數(shù),用于指定對(duì)齊方式(“”:左對(duì)齊,“>”:右對(duì)齊,“=”:右對(duì)齊,只對(duì)數(shù)字有效,“^”:表示居中和
width一起使用。)
sign:可選參數(shù),用于指定有無(wú)符號(hào)數(shù)(正數(shù),負(fù)數(shù))
#:可選參數(shù),對(duì)二進(jìn)制數(shù),八進(jìn)制數(shù),和十六進(jìn)制數(shù),加上#會(huì)顯示0b/0o/0x前綴
width:可選參數(shù),用于指定寬度
.precision可選參數(shù),用于指定保留的小數(shù)位數(shù)
type:可選參數(shù),用于指定類型
實(shí)例
import math # 導(dǎo)入Python的數(shù)學(xué)模塊
print('1251+3950的結(jié)果是(以貨幣形式顯示):¥{:,.2f}元'.format(1251+3950)) # 以貨幣形式顯示
print('{0:.1f}用科學(xué)計(jì)數(shù)法表示:{0:E}'.format(120000.1)) # 用科學(xué)計(jì)數(shù)法表示
print('π取5位小數(shù):{:.5f}'.format(math.pi)) # 輸出小數(shù)點(diǎn)后五位
print('{0:d}的16進(jìn)制結(jié)果是:{0:#x}'.format(100)) # 輸出十六進(jìn)制數(shù)
print('天才是由 {:.0%} 的靈感,加上 {:.0%} 的汗水 。'.format(0.01,0.99)) # 輸出百分比,并且不帶小數(shù)
字符串編碼轉(zhuǎn)換
最早的字符串編碼時(shí)美國(guó)標(biāo)準(zhǔn)信息交換嗎,即ASCII碼。它僅有10個(gè)數(shù)字,26個(gè)大小寫字母,26個(gè)小寫英文字母及一些其他符號(hào)進(jìn)行編碼。ASCII碼最多只能表示256個(gè)符號(hào),每個(gè)字符占一個(gè)字節(jié)。GBK和GB2312是我國(guó)制定的中文編碼規(guī)則,使用一個(gè)字節(jié)表示英文字母,2個(gè)字節(jié)表示中文。UTF-8是國(guó)際通用編碼,對(duì)全世界所有國(guó)家需要用到的字符都進(jìn)行了編碼。UTF-8采用一個(gè)字節(jié)表示英文,3個(gè)字節(jié)表示中文。
在python中,有兩種常用的字符串類型,分別問(wèn)str和bytes。其中str表示Unicode字符即ASCII;bytes表示二進(jìn)制數(shù)據(jù)。這兩種類型的字符串不能拼接在一起使用。通常情況下,str在內(nèi)存中以Unicode表示,一個(gè)字符對(duì)應(yīng)若干個(gè)字節(jié)。但是如果在網(wǎng)絡(luò)傳輸,或者保存到硬盤,就需要str轉(zhuǎn)換成字節(jié)類型即bytes。
bytes類型的數(shù)據(jù)是帶有b前綴的字符串(用單引號(hào)或雙引號(hào))
例如:b'\xd2\xb0 和b'mr'都是bytes類型
str類型和bytes類型可以用encode()和decode()方法相互轉(zhuǎn)換
使用encode()方法編碼
encode()方法為str對(duì)象的方法,用于將字符串轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)(即bytes),也稱為“編碼”。
語(yǔ)法格式:str.encode([encoding= “utf-8”][,errors= “strict”]
- str:表示要進(jìn)行轉(zhuǎn)換的字符串;
- encoding = “utf-8”:可選參數(shù),用于指定進(jìn)行轉(zhuǎn)碼時(shí)采用的字符編碼,默認(rèn)為UTF-8,如果想使用簡(jiǎn)體中文,也可以設(shè)置為gb2312。當(dāng)只有這一個(gè)參數(shù)時(shí),也可以省略前面的“encoding=”,直接寫編碼;
- errors = “strict”:可選參數(shù),用于指定錯(cuò)誤處理方式,其可選擇值可以是strict(遇到非法字符就拋出異常)、ignore(忽略非法字符)、replace(用“?”替換非法字符)或xmlcharrefreplace(使用xml的字符引用)等,默認(rèn)值為strict。
實(shí)例
verse = '野渡無(wú)人舟自橫'
byte = verse.encode('GBK') # 采用GBK編碼轉(zhuǎn)換為二進(jìn)制,不處理異常
print('原字符串:',verse) # 輸出原字符串(沒(méi)有改變)
print('轉(zhuǎn)換后:',byte) # 輸出轉(zhuǎn)換后的二進(jìn)制數(shù)據(jù),如果用UTF-8來(lái)轉(zhuǎn)換呢?
使用decode()方法解碼
decode()方法為bytes對(duì)象的方法用于將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為字符串,即將使用encode()方法轉(zhuǎn)換的結(jié)果在轉(zhuǎn)換為字符串,也稱為“解碼”
語(yǔ)法格式:bytes.decode([encoding= “utf-8”][,errors= “strict”]
- bytes:表示要進(jìn)行轉(zhuǎn)換的二進(jìn)制數(shù)據(jù),通常是encode()方法轉(zhuǎn)換的結(jié)果
- encoding = “utf-8”:可選參數(shù),用于指定進(jìn)行轉(zhuǎn)碼時(shí)采用的字符編碼,默認(rèn)為UTF-8,如果想使用簡(jiǎn)體中文,也可以設(shè)置為gb2312。當(dāng)只有這一個(gè)參數(shù)時(shí),也可以省略前面的“encoding=”,直接寫編碼。
- errors = “strict”:可選參數(shù),用于指定錯(cuò)誤處理方式,其可選擇值可以是strict(遇到非法字符就拋出異常)、ignore(忽略非法字符)、replace(用“?”替換非法字符)或xmlcharrefreplace(使用xml的字符引用)等,默認(rèn)值為strict。
實(shí)例
verse = '野渡無(wú)人舟自橫'
byte = verse.encode('GBK') # 采用GBK編碼轉(zhuǎn)換為二進(jìn)制,不處理異常
print('原字符串:',verse) # 輸出原字符串(沒(méi)有改變)
print('轉(zhuǎn)換后:',byte) # 輸出轉(zhuǎn)換后的二進(jìn)制數(shù)據(jù),如果用UTF-8來(lái)轉(zhuǎn)換呢?
print('解碼后:',byte.decode('GBK')) # 對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行解碼
總結(jié)
到此這篇關(guān)于python字符串常規(guī)操作大全的文章就介紹到這了,更多相關(guān)python字符串操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python字符串的多行輸出的實(shí)例詳解
- Python字符串的15個(gè)基本操作(小結(jié))
- Python序列的推導(dǎo)式實(shí)現(xiàn)代碼
- Python序列化與反序列化相關(guān)知識(shí)總結(jié)
- python序列類型種類詳解
- python入門課程第五講之序列和字符串