<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在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]
引數說明:
定義一個字元,然後擷取不同長度的子字元,程式碼如下:
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)
引數說明:
說明:在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中,字串物件提供了很多應用於字串查詢的方法,這裡主要介紹以下幾種:
檢索指定字串在列外一個字串中出現的次數檢索物件不存在,怎返回0,否則返回出現的次數,其語法如下:
str.count(sub[, start[,end]])
引數說明:
該方法用於檢索是否包含指定的子字串,檢索物件不存在,怎返回-1,否則返回首次出現的索引值,其語法如下:
str.findt(sub[, start[,end]])
引數說明:
index()方法同find()方法類似,也是用於檢索是否包含指定的子字串。只不過使用index()方法,當指定的字串不存在時,會丟擲異常,其語法格式如下:
str.index(sub[, start[,end]])
引數說明:
該方法用於檢索是否指定字串開頭。如果是則返回True,否則返回False。其語法格式如下:
str.startswith(prefix[, start[, end]])
引數說明:
該方法用於檢索是否指定字串結尾。如果是則返回True,否則返回False。其語法格式如下:
str.endswith(prefix[, start[, end]])
引數說明:
在Python中,字串物件提供了lower()方法和upper()方法進行字母大小寫轉換。
將字串中大寫字母轉換為小寫,其語法如下:
str.lower()
2.upper()方法
將字串中小寫字母轉換為大寫,其語法如下:
str.upper()
這裡的特殊字元是指製表符“t”、回車符“r”、換行符“n”等。
strip()方法用於去除字串左、右兩側的空格和特殊字元,語法如下:
str.strip([chars])
引數說明:
lstrip()方法用於去除左側的空格和特殊字元,語法格式如下:
str.lstrip([chars])
引數說明:
rstrip()方法用於去除右側的空格和特殊字元,語法格式如下:
str.rstrip([chars])
引數說明:
Python 的字串格式化有兩種方式: “% ”操作符方式,字串物件的format() 方法
【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 位)
【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 33[42;1m%(name)10s 33[0m, " " 33[42;1m%(age)-10d 33[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))
執行結果:
到此這篇關於Python字串常規操作小結的文章就介紹到這了,更多相關Python字串操作內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45