相信不少學習python的程序員都接觸過string模塊
string模塊主要包含關於字符串的處理函數
多說無益,初學python的小伙伴還不趕緊碼起來
接下來將會講到字符串的大小寫、判斷函數、
以及字符串常規操作(填充、搜索、修改、剪切、添加、分割)
1.大小寫轉換
大小寫轉化在整個string操作中還是比較重要的,主要分三種類型
第一種:全部大小寫轉化upper()與lower()
兩個函數如直譯一樣,將指定字符串變更大小寫后新生成字符串存儲
注意:這里是生成新的字符串來存放,所以不能作為操作來使用
upper()負責將指定字符串變為大寫,可以單獨使用,也可以放到print函數中
lower()負責將指定字符串變為小寫,可以單獨使用,也可以放到print函數中
代碼如下:
import string s="abcde" #放入print中使用 print(s.upper()) print(s.lower()) print("abcdef".upper()) print("QWERT".lower()) #這里注意是通過生成新的字符串而不是更改原來字符串 s.upper()print(s)
效果如下所示:
第二種:將字符串首部變更大小寫title()與capitalize()
title()將給定的字符串中所有單詞的首字母大寫,其他全部小寫
capitalize()將給定的字符串中首字母大寫,其他小寫
這兩個函數主要用於文稿改寫等方面
代碼測試如下:
import string s="abcde,qweRTY" t="abcde qweRTY" #以,隔開的單詞 print(s.title()) print(s.capitalize()) #以空格隔開的單詞 print(t.title()) print(t.capitalize())
結果如下所示
很明顯 title函數結果為1,3行只有第一個單詞中A,和第二個單詞中的Q大寫 其他全部小寫
至於capitalize()對應的2,4行只有第一個字母會大寫
第三種大小寫反轉swapcase()
swapcase()的功能便是將原字符串中的大寫改為小寫,小寫再改為大寫
我們以"qweASDrtZX"為例子
結果應該為:QWEasdRTzx
由於使用較少所以不予過多介紹
2.is判斷函數
is判斷函數為一種判斷函數,根據規定字符串判斷是否符合結果返回True或者False
主要判斷如下:
isdecimal():判斷給定字符串是否全為數字
isalpha():判斷給定的字符串是否全為字母
isalnum():判斷給定的字符串是否只含有數字與字母
isupper():判斷給定的字符串是否全為大寫
islower():判斷給定的字符串是否全為小寫
istitle():判斷給定的字符串是否符合title()
isspace():判斷給定的字符串是否為空白符(空格、換行、制表符)
isprintable():判斷給定的字符串是否為可打印字符(只有空格可以,換行、制表符都不可以)
isidentifier():判斷給定的字符串是否符合命名規則(只能是字母或下划線開頭、不能包含除數字、字母和下划線以外的任意字符。)
import string # 1234 全是數字 為True print("1234".isdecimal()) # asdf4 中4是數字不是字母 為False print("asdf4".isdigit()) # qwe12@ 中@既不是數字 也不是字母為False print("qwe12@".isalnum()) # asdf全是小寫 為True print("asdf".islower()) # ADS全是大寫 為True print("ADS".isupper()) # Wshd,qwe中 雖然W大寫 但是第二個單詞qwe中q小寫 不符合title()所以為False print("Wshd,qwe".istitle()) # \n為換行 是空白符 為True print("\n".isspace()) # \t為制表符 不可打印 為False print("\t".isprintable()) # qe123 符合命名規則 為True print("qe125".isidentifier())
判斷結果如下:
3.字符串填充
談起來填充,相比大家都不會陌生。填充操作雖然有些少見,但有時候也能發揮極大作用。
填充操作是將限定長度的字符串,用給定的字符擴充至一定長度。所以最重要的有兩個元素。
第一是擴充的長短,也就是width,當字符串比width小時才會擴充,當字符串大於長度時,自然是返回字符串 本身。
第二便是擴充的位置,分三類:源字符串居左,居右和居中。
居中為center(width),這時候原來的字符串將會在中間,擴充物出現在兩邊。
居左為ljust(width),l為lef的縮寫,源字符串在左邊,填充物出現在字符串的右邊。
居右為rjust(width), r為right的縮寫,源字符串在右邊,填充物出現在字符串的左邊。
有一點需要注意的是,填充物fillchar是可選的,其默認為空格,可以更改為任意字符。
以字符串“qwer”居左填充為長度10的字符串,填充物為“+”為例,代碼應該如下:
import string print("qwer".ljust(10,"+"))
代碼結果:
這里單獨介紹函數zfill(width),為何着重介紹zfill函數呢?
一方面 zfill(width)函數只需要傳入參數width即可,填充物為“0”,采用居右填充的方式
另外一方面該函數會識別字符串的正負,若為“+”或者“-”則不變,越過繼續填充
例子如下:
import string # 不加"+""-"純數字,用填充物"0"將字符串前填充滿 print("12345".zfill(10)) # 加"-"純數字,越過"-"用填充物"0"將字符串前填充滿 print("-125".zfill(10)) # 加"+"數字字母組合,越過"+"用填充物"0"將字符串前填充滿 print("+qwe125".zfill(10)) # 加其他符號,用填充物"0"將字符串前填充滿 print("#qwe12".zfill(10))
結果如下所示:
4.子字符串搜索
1.子字符串位置搜索count(sub[, start[, end]])
主要對指定字符串搜索是否具有給定的子字符串sub,若具有則返回出現次數。
strat與end代表搜索邊界,若無寫則代表全字符串搜索
以下為例子:
import string # 全部字符串內 搜索qwe 出現的次數 print("qwertasdqwezxcqwe".count("qwe")) # 由於字符串從0開始計數,1為字符串第二個,相當於從w開始 print("qwertasdqwezxcqwe".count("qwe",1)) # 從字符串第 2個開始到第15個截止,共出現qwe的次數 print("qwertasdqwezxcqwe".count("qwe",1,14))
運行結果統計如下:
2.字符串開始與結尾判斷
startswith(prefix[, start[, end]])
endswith(suffix[, start[, end]])
兩個函數作用相同,判斷函數的開始,或者末尾的字符串是否為指定字符串
與之前的搜索相同,可以給字符串加邊界,若無則為全字符串搜索
兩個函數都屬於判斷函數,返回結果為True與False
強調:這里的不僅可以輸入子字符串,還可以輸入元組,若為元組時候只要有一個成真即為True
以下面為例子:
import string # 搜索開頭位置為qwe 符合條件,為True print("qwertasdqwezxcqwe".startswith("qwe")) # 開頭位置為字符串下標為1開始,也就是說開頭為wer與qwe不同為False print("qwertasdqwezxcqwe".startswith("qwe",1)) # 結尾位置為qwe符合條件 為True print("qwertasdqwezxcqwe".endswith("qwe","asd"))
運行結果為下:
3.字符串位置鎖定find與index函數
find(sub[, start[, end]]) 返回第一個子字符串的位置信息,若無則為-1
rfind(sub[, start[, end]])返回最右邊的第一個子字符串的位置信息,若無則為-1
index(sub[, start[, end]]) 返回第一個子字符串的位置信息,若無則為報錯
rindex(sub[, start[, end]])返回最右邊的第一個子字符串的位置信息,若無則報錯
從傳參可以看出,查詢位置函數也可以限定邊界,使用方法同上函數
import string s="qweraqwesfgzqweop" print(s.find("qwe")) print(s.rfind("qwe")) print(s.index("qwe")) print(s.rindex("qwe"))
結果如下:
這里需要注意:
以上情況均為找到對應子字符串,若未找到
運行結果:find返回-1 index報錯,情況如下
5.字符串替換
replace(old, new[, count]):將搜索到的字符串改為新字符串
作為替代函數,舊的字符串與新的字符串是必須輸入的
count是可選擇輸入的參數,代表更改個數。
import string s="qweraqwesfgzqweop" # 將字符串全部的qwe 換為asd print(s.replace("qwe","asd")) # 將字符串前兩個qwe 換為asd print(s.replace("qwe","asd",2)) # 將字符串全部的qew 換為asd 沒有則輸出原字符串 print(s.replace("qew","asd"))
expandtabs(N)將\t 改為一定數量的空格
空格計算方式:N-(之前字符串長度)=空格數
若N-(之前字符串長度)=0 則空格數為N
若N-(之前字符串長度)<0 則空格數為1
import string t="qwe\tqwer\tqasdsdf\tas" print(t.expandtabs(4))
第一個\t :設定長度為4,之前字符串qwe長度為3,4-3=1 替換1個空格
第二個\t :設定長度為4,之前字符串qwer長度為4,4-4=0 替換4個空格
第三個\t :設定長度為4,之前字符串qsdfsdf長度為7,4-7=-3<0 替換1個空格
所以結果如下所示:
6.字符串分割
字符串分割常用函數為partition()和rpartition()
partition(sep)對給定字符串進行切割,切割成三部分
首先搜索到字符串sep,將sep之前的部分為一部分,sep本身作為一部分,剩下作為一部分
partition()與rpartition()之間十分相似,主要不同體現在當字符串中沒有指定sep時
partition()分為三部分,字符串、空白、空白
rpartition()分為三部分,空白、空白、字符串
代碼如下:
import string t="qwertyuasdfghjkl" print(t.partition("yua")) print(t.partition("asqw")) print(t.rpartition("asqw"))
運行結果:
('qwert', 'yua', 'sdfghjkl')
('qwertyuasdfghjkl', '', '')
('', '', 'qwertyuasdfghjkl')
另一種常見的函數為split(sep=None, maxsplit=-1)和rsplit(sep=None, maxsplit=-1)
split()函數傳參兩種
sep為切割,默認為空格
maxsplit為切割次數,給值-1或者none,將會從左到右每一個sep切割一次
rsplit()相同,但是其遍歷方式從右到左
最常見在輸入與input連用,如下:
import string t=input().split() print(t)
7.字符串添加join()
將可迭代數據用字符串連接起來 ,首先理解什么是可迭代數據,簡單理解就是字符串string、列表list、元組tuple、字典dict、集合set。
而且每個參與迭代的元素必須是字符串類型,不能包含數字或其他類型。
以下代碼為例子:
import string #字符串類型 a="qwer" print("_".join(a)) #元組類型 b=("a","b","c","d") print("=".join(b)) #集合類型 c={"qwe","asd","zxc"} print(" ".join(c))
首先第一個例子為字符串類型,所以每一個字符之間都用之前的字符串來交叉
同理元組也是,元與元之間都要加入字符串“=”
集合也是這樣,但是需要注意,集合的無需性,所以順序可能顛倒
以上代碼結果如下:
由於參與迭代的每個元素必須是字符串類型,不能包含數字或其他類型。
所以L1=(1,2,3)或者
L2=('AB',{'a','cd'})
是會報錯的
8.字符串修剪
strip([chars]) lstrip([chars]) rstrip([chars])
strip()是為移除指定字符串char,如果沒傳入參數則為移除空格、制表符、換行符
lstrip()中 l為left縮寫,函數表示從左到右遍歷
rstrip()中 r為right縮寫,函數表示從右邊開始遍歷
注意移除為到非char截止,舉例子如下:
import string a=" qweasdzxcrtqwe " print(a.strip()) b="qweasdzxcrtqwe " print(b.lstrip('q')) c=" qweasdzxcrtqwe" print(c.rstrip('qew'))
a為制表符加字符串,由於strip()未傳入參數,所以刪除空白
b使用lstrip()傳入參數q,字符串從左開始第一個為q,是傳入參數移除,第二個w不是傳入參數,修剪停止,將剩下所有輸出
c使用rstrip()傳入參數qew,字符串從右開始,第一個為q在傳入參數中,同理第二個、第三個也在,所以移除,第四為t不在傳入參數中,將剩下所有輸出
輸出結果如下:
最后string的官方文檔為官方文檔
覺得不錯的還望各位大佬點贊分享