網站首頁 編程語言 正文
一、前言
在Python開發的過程中,為了實現某項功能,經常需要對某些字符串進行特殊的處理,如拼接字符串、截取字符串、格式化字符串等。下面將對Python中常用字符串操作方法進行介紹。
二、拼接字符串
在使用“+”運算符可完成對多個字符串的拼接,“+”運算符可以連接多個字符串并產生一個字符串對象。
例如,定義兩個字符串,一個保存英文版的名言,另一個用于保存中文版的名言,然后使用“+”運算符進行拼接,代碼如下:
mot_en = "Rememberance is a form meeting. Frgetfulness is a form of freedom" mot_cn = "記憶是一個相遇。遺忘是一種自由。" print(mot_en + "-" + mot_cn)
??運行結果如下:
字符串不允許與其他類型的數據拼接,例如,使用下面代碼,字符串與數值相拼接,將產生異常。
str1 = "今天一共走了" num = 23456 str2 = "步" print(str1 + num + str2)
解決該問題,可以將整個數轉換為字符串。將正數轉換為字符串可以用str()函數。修改后的代碼如下:
str1 = "今天一共走了" num = 23456 str2 = "步" print(str1 + str(num) + str2)
運行上面代碼,結果如下:
三、計算字符串的長度
??由于不同的字符串所占字節不同,所以要計算字符串的長度,需要先了解個字符串所占的字節數。在Python中,數字、英文、小數點、下劃線和空格占一個字節;一個漢字可以會占2~4個字節,占幾個字節取決于采用的編碼。
在Python中,提供了len()函數計算字符串的長度。語法格式如下:
len(str)
其中,string用于指定要統計的字符串。
例如:定義一個字符串,內容為“人生苦短,我用Python”,然后用len()函數計算該字符串的長度,代碼如下:
str1 = "人生苦短,我用Python" # 定義字符串 string = len(str1) # 計算字符串長度 print(string)
執行上述代碼顯示為“13”
在實際開發時,有時需要獲取字符串所占的字節數,即如果采用UTF-8編碼,漢字占3個字節,采用GBK或者GB2312時,漢字占兩個字節,可以使用encode()方法進行編碼后再進行獲取。
str1 = "人生苦短,我用Python" # 定義字符串 string = len(str1.encode()) # 計算UTF-8編碼字符串的長度 print(string)
運行代碼結果如下:
如果要獲取采用GBK編碼的字符串的長度,可以使用下列代碼:
str1 = "人生苦短,我用Python" # 定義字符串 string = len(str1.encode("gbk")) # 計算GBK編碼字符串的長度 print(string)
運行代碼結果如下:
四、截取字符串
由于字符串也屬于序列,所以要截取字符串,可以采取切片來實現。通過切片的方式截取字符串的語法格式如下:
string[start : end : step]
參數說明:
- string:表示要截取的字符串
- start:表示要截取的第一個字符的索引(包括該字符),如果不指定,則默認為“0”
- end:示要截取的后一個字符的索引(不包括該字符),如果不指定,則默認為字符串的長度
- step:表示切片的步長,如果省略,則默認為“1”,當省略步長時,最后一個冒號可以省略
定義一個字符,然后截取不同長度的子字符,代碼如下:
str1 = "人生苦短,我用Python" # 原生字符串 substr1 = str1[1] # 截取第2字符 substr2 = str1[5:] # 從第6字符截取 substr3 = str1[:5] # 從左邊數截取5個字符 substr4 = str1[2:5] # 截取第3到第5個字符 print("原生字符串", str1) print(substr1 + "\n" + substr2 + "\n" + substr3 + "\n" + substr4)
運行結果如下:
在進行字符串截取的時候,如果指定的索引不存在,則會拋出異常,如下圖所示:
要解決該問題,可以使用try…except語句拋出異常,代碼如下:
str1 = "人生苦短,我用Python" # 原生字符串 try: sbustr1 = str1[15] except IndexError: print("指定索引不存在")
運行結果如下:
五、分隔字符串
在Python中,字符串對象提供了分隔字符串的方法,分隔字符串是把字符串分隔為列表。
字符串對象的split()方法可以實現分割,split()方法的語法格式如下:
str.split(sep,maxsplit)
參數說明:
- str:表示要進行分割的字符串。
- sep:用于指定分割符,可以包含多個字符,默認為None,即所有空字符(包括空格、換行“\n”、制表符“\t”等)
- maxsplit:可選參數,用于指定分割的次數,如果不指定或者為-1,則分割次數沒有限制,否則返回結果列表的元素個數最多為maxsplit+1
- 返回值:分隔后的字符串列表
說明:在split方法中,如果不指定sep參數,那么也不能指定maxsplit參數。
例如:定義一個百度網址的字符串,然后用split()方法根據不同的分隔符進行分割,代碼如下:
str1 = "百 度 網 址 >>> https://www.baidu.com/" # print("原字符串", str1) list1 = str1.split() # 采用默認分隔符分割 list2 = str1.split(">>>") # 采用多個分隔符分割 list3 = str1.split(".") # 采用“.”進行分割 list4 = str1.split(" ", 4) # 采用空格進行分割,并且只分割前四個 print(str(list1) + "\n" + str(list2) + "\n" + str(list3) + "\n" + str(list4))
運行結果如下:
六、檢索字符串
在Python中,字符串對象提供了很多應用于字符串查找的方法,這里主要介紹以下幾種:
1.count()方法
檢索指定字符串在列外一個字符串中出現的次數檢索對象不存在,怎返回0,否則返回出現的次數,其語法如下:
str.count(sub[, start[,end]])
參數說明:
- str:表示原字符串
- sub:表示要檢索的子字符串
- start:可選參數,表示檢索范圍的起始位置的索引,如不指定,默認從頭檢索
- end:可選參數,表示檢索范圍的結束位置的索引,如不指定,則檢索到結尾。
2.find()方法
該方法用于檢索是否包含指定的子字符串,檢索對象不存在,怎返回-1,否則返回首次出現的索引值,其語法如下:
str.findt(sub[, start[,end]])
參數說明:
- str:表示原字符串
- sub:表示要檢索的子字符串
- start:可選參數,表示檢索范圍的起始位置的索引,如不指定,默認從頭檢索
- end:可選參數,表示檢索范圍的結束位置的索引,如不指定,則檢索到結尾。
3.index()方法
index()方法同find()方法類似,也是用于檢索是否包含指定的子字符串。只不過使用index()方法,當指定的字符串不存在時,會拋出異常,其語法格式如下:
str.index(sub[, start[,end]])
參數說明:
- str:表示原字符串
- sub:表示要檢索的子字符串
- start:可選參數,表示檢索范圍的起始位置的索引,如不指定,默認從頭檢索
- end:可選參數,表示檢索范圍的結束位置的索引,如不指定,則檢索到結尾。
4.startswith()方法
該方法用于檢索是否指定字符串開頭。如果是則返回True,否則返回False。其語法格式如下:
str.startswith(prefix[, start[, end]])
參數說明:
- str:表示原字符串
- prefix:表示要檢索的子字符串
- start:可選參數,表示檢索范圍的起始位置的索引,如不指定,默認從頭檢索
- end:可選參數,表示檢索范圍的結束位置的索引,如不指定,則檢索到結尾。
5.endswith()方法
該方法用于檢索是否指定字符串結尾。如果是則返回True,否則返回False。其語法格式如下:
str.endswith(prefix[, start[, end]])
參數說明:
- str:表示原字符串
- prefix:表示要檢索的子字符串
- start:可選參數,表示檢索范圍的起始位置的索引,如不指定,默認從頭檢索
- end:可選參數,表示檢索范圍的結束位置的索引,如不指定,則檢索到結尾。
七、字母的大小寫轉換
在Python中,字符串對象提供了lower()方法和upper()方法進行字母大小寫轉換。
1.lower()方法
將字符串中大寫字母轉換為小寫,其語法如下:
str.lower()
2.upper()方法
將字符串中小寫字母轉換為大寫,其語法如下:
str.upper()
八、去除字符串中的空格和特殊字符
這里的特殊字符是指制表符“\t”、回車符“\r”、換行符“\n”等。
1.strip()方法
strip()方法用于去除字符串左、右兩側的空格和特殊字符,語法如下:
str.strip([chars])
參數說明:
- str:表示要去除空格字符串
- chars:可選參數,用于指定要去除的字符,可以指定多個,如果設置chars為“@.”,則去除左右側包括的“@”或“.”,如不知定,則默認去除制表符“\t”、回車符“\r”、換行符“\n”等。
2.lstrip()方法
lstrip()方法用于去除左側的空格和特殊字符,語法格式如下:
str.lstrip([chars])
參數說明:
- str:表示要去除空格字符串
- chars:可選參數,用于指定要去除的字符,可以指定多個,如果設置chars為“@.”,則去除左側包括的“@”或“.”,如不知定,則默認去除制表符“\t”、回車符“\r”、換行符“\n”等。
3.rstrip()方法
rstrip()方法用于去除右側的空格和特殊字符,語法格式如下:
str.rstrip([chars])
參數說明:
- str:表示要去除空格字符串
- chars:可選參數,用于指定要去除的字符,可以指定多個,如果設置chars為“@.”,則去除右側包括的“@”或“.”,如不知定,則默認去除制表符“\t”、回車符“\r”、換行符“\n”等。
九、格式化字符串
Python 的字符串格式化有兩種方式: “% ”操作符方式,字符串對象的format() 方法
1.使用“ %”操作符
【1】 % 格式化方式
%[(name)][flags][width].[precision]typecode (name): 可選,用于選擇指定的key flags: 可選,可供選擇的值有: +: 右對齊;正數前加正好,負數前加負號; -: 左對齊;正數前無符號,負數前加負號; : 右對齊;正數前加空格,負數前加負號; 0: 右對齊;正數前無符號,負數前加負號;用 0 填充空白處 width: 可選,占有寬度 .precision: 可選,小數點后保留的位數 typecode: 必選 s,獲取傳入對象的 __str__ 方法的返回值,并將其格式化到指定位置 r,獲取傳入對象的 __repr__ 方法的返回值,并將其格式化到指定位置 c,整數:將數字轉換成其 unicode 對應的值,10進制范圍為 0 <= i <= 1114111(py27則只支持 0-255);字符:將字符添加到指定位置 o,將整數轉換成八進制表示,并將其格式化到指定位置 x,將整數轉換成十六進制表示,并將其格式化到指定位置 d,將整數、浮點數轉換成十進制表示,并將其格式化到指定位置 e,將整數、浮點數轉換成科學計數法,并將其格式化到指定位置(小寫 e ) E,將整數、浮點數轉換成科學計數法,并將其格式化到指定位置(大寫 E ) f,將整數、浮點數轉換成浮點數表示,并將其格式化到指定位置(默認保留小數點后6位) F,同上 g,自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),并將其格式化到指定位置(如果是科學計數則是 e;) G,自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),并將其格式化到指定位置(如果是科學計數則是 E;) %,當字符串中存在格式化標志時,需要用 %% 表示一個百分號
【2】% 格式化方式例子
[[fill]align][sign][#][0][width][,][.precision][type] fill: 【可選】空白處填充的字符 align:【可選】對齊方式(需配合width使用) <: 內容左對齊 >: 內容右對齊(默認) =: 內容右對齊,將符號放置在填充字符的左側,且只對數字類型有效。 即使:符號 + 填充物 + 數字 ^: 內容居中 sign: 【可選】有無符號數字 +: 正號加正,負號加負; -: 正號不變,負號加負; 空格: 正號空格,負號加負; #:【可選】對于二進制、八進制、十六進制,如果加上 #,會顯示 0b/0o/0x,否則不顯示 ,: 【可選】為數字添加分隔符,如:1,000,000 width: 【可選】格式化位所占寬度 .precision: 【可選】小數位保留精度 type: 【可選】格式化類型 傳入” 字符串類型 “的參數 s: 格式化字符串類型數據 空白: 未指定類型,則默認是 None,同 s 傳入“ 整數類型 ”的參數 b: 將十進制整數自動轉換成二進制表示然后格式化 c: 將十進制整數自動轉換為其對應的 unicode 字符 d: 十進制整數 o: 將十進制整數自動轉換成8進制表示然后格式化; x: 將十進制整數自動轉換成16進制表示然后格式化(小寫 x ) X: 將十進制整數自動轉換成16進制表示然后格式化(大寫 X ) 傳入“ 浮點型或小數類型 ”的參數 e: 轉換為科學計數法(小寫 e )表示,然后格式化; E: 轉換為科學計數法(大寫 E )表示,然后格式化; f: 轉換為浮點型(默認小數點后保留 6 位)表示,然后格式化; F: 轉換為浮點型(默認小數點后保留 6 位)表示,然后格式化; g: 自動在e和f中切換 G: 自動在E和F中切換 %: 顯示百分比(默認顯示小數點后 6 位)
2.字符串對象的format() 方法
【1】 format 格式化方式
# 字符串格式化 print("I am %s, %d years old." % ("Y", 18)) print("I am %s, %s years old." % ("Y", 18)) print("I am %s, %s years old." % ("Y", ["18"])) print("I am %s, %s years old." % ("Y", (18,))) # 保留 print("percent %0.2f%%." % 23.36666) # 截取 print("percent %.5s." % 23.36666) # 字典形式 print("I am %(name)s, %(age)d years old." % {"name": "Y", "age": 18}) # 其他 print("I am \033[42;1m%(name)10s\033[0m, " "\033[42;1m%(age)-10d\033[0m years old." % {"name": "Y", "age": 18}) print("user", "root", "password", "root", sep=":")
運行結果:
??【2】format 格式化方式例子
# format 格式 print("I am {}, {} years old, who is {}.".format("Y", "22", "wise")) print("I am {0}, {1} years old, who is {2}.".format("Y", "22", "wise")) print("I am {1}, {1} years old, who is {1}.".format("Y", "22", "wise")) print("I am {name}, {age} years old, who is {adj}.".format(name="Y", age="22", adj="wise")) print("I am {name}, {age} years old, who is {adj}.".format(**{"name": "Y", "age": "22", "adj": "wise"})) print("I am {0[0]}, {0[1]} years old, who is {0[2]}.".format(["Y", "22", "wise"], [1, 2, 3])) print("I am {:s}, {:d} years old, who is {:f}.".format("good", 122, 12.22)) print("I am {:s}, {:d} years old, who is {:f}.".format(*["good", 122, 12.22])) # 進制,百分比 print("number: {:b}, {:o}, {:d}, {:x}, {:X}, {:0.2%}".format(12, 15, 17, 999, 999, 0.55))
運行結果:
原文鏈接:https://blog.csdn.net/weixin_45191386/article/details/123879627
相關推薦
- 2022-03-23 深入淺析OpenCV?copyTo()函數_C 語言
- 2022-03-14 @Builder 實際參數列表和形式參數列表長度不同
- 2022-06-09 Nginx隱藏式跳轉(瀏覽器URL跳轉后保持不變)_nginx
- 2022-09-22 使用 sed 替換字符串中最后一次出現的字符
- 2022-06-21 詳解C#中檢查null的語法糖_C#教程
- 2022-03-19 Linux系統下安裝Redis數據庫過程_Redis
- 2022-04-16 Django中外鍵ForeignKey介紹使用_python
- 2022-04-15 c語言?指針零基礎講解_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支