1. 程式人生 > >Python - 字符串的操作方法

Python - 字符串的操作方法

表示 next ide oat string 一段 帶寬 slow 通用

字符串操作方法

生成字符串
str = ‘Python string Function study‘

sequence類型都支持的一些通用操作:
成員檢查:in、not in ‘Py‘ in str ‘python‘ not in str
連接:+ str_new = str1 + str2
復制:* str * 2
下標取值:s[i] str[3]
切片:s[i : j] str[3:8]

長度檢查:len(s) len(str) print(‘%s length = %d‘ % (str,len(str)))
最小值:min(s) min(str) 空格在上面字符串中是最小的
最大值:max(s) max(str) 大寫字母要小於小寫字母

字符串切片
1. 字符串變量名[x:y],表示下標從x到y的一段字符串(不包括y)。
當x不寫,像[:y],表示從頭開始,相當於[0:y]。當y不寫時,表示一直到尾。當x和y兩個都不寫時,就表示整個字符串。

str_result = str[3:8]
2. 步長切片截取
使用兩個冒號來實現按一定“步數”來取值的 [x:y:z]
str_result = str[1:9:3] #即從第1個字符開始,每隔3個位移取一個值,到第9個字符截止(不包括第9個字符)

一. 查找 & 替換類方法

1. str.count(sub, start= 0,end=len(string))
返回字符串裏某個字符或是子字符串出現的次數。可選參數為在字符串搜索的開始(默認為第一個字符)與結束(默認為最後一個字符)位置。
str = ‘Python string Function‘

str_result = str.count(‘th‘, 2, 15)

2. str.find(str, beg=0, end=len(string)) str.rfind(sub[, start[, end]]) str.index(sub[, start[, end]]) str.rindex(sub[, start[, end]])
檢測字符串中是否包含子字符串 str ,如果指定可選參數 beg(開始) 和 end(結束) 範圍,則檢查是否包含在指定範圍內,如果包含子字符串返回開始的索引值,否則返回-1。
index()方法與find()方法一樣,如果包含子字符串則返回開始的索引值,只不過index()方法如果str不在 string中會報一個異常。
str = ‘Python string Function‘
str_result = str.find(‘python‘, 1, len(str)) #find()查找的是子字符串在全字符串中出現的第一個位置,匹配到字符串就結束查找,不管後面還有沒有匹配的字符串。
str_result = str.rfind(‘string‘, 1, len(str)) #從最右邊開始查找,但返回的index位置卻是從原字符串的最左邊開始算的
str_result = str.index(‘Python‘, 0, len(str))
str_result = str.rindex(‘string‘, 0, len(str))

3. str.replace(old, new[, count])
返回一個新字符串,原串中的old被替換為new,可選參數count指定替換次數。
str = ‘aaalllaaannn‘
str_result = str.replace(‘a‘, ‘d‘, 4)

4. str.maketrans(x[, [y, z]]) str.translate(map)
用於創建字符映射的轉換表,接受兩個參數x, y的最簡單的調用方式,第一個參數是字符串中需要轉換的字符組成的字符串,第二個參數也是字符串表示要轉換的目標。 可選參數Z 的意思是刪除原字符串中的相應字符
兩個參數字符串的長度必須相同,且為一一對應的關系。
table = str.maketrans(‘al‘, ‘bc‘, ‘n‘)
str = ‘alan‘
str_result = str.translate(table)

二. 判斷類方法,通常返回True和False

5. str.endswith(suffix[, start[, end]]) str.startswith(str, beg=0,end=len(string))
用於判斷字符串是否以指定子字符串 結尾和開頭,如果是則返回True,否則返回False。如果可選參數指定值,則在指定範圍內檢查。默認檢索字符串的開始(默認為第一個字符)與結束(默認為最後一個字符)位置。
str_result = str.endswith(‘dy‘, 10, 30)
str_result = str.startswith(‘P‘, 0, 10)

6. str.isalnum()
檢測字符串是否由字母和數字組成,如果 string 至少有一個字符並且所有字符都是字母或數字則返回 True,否則返回 False
str = ‘abc 123‘
str_result = str.isalnum() #字符串中包含空格也會返回False, 中文字符是被允許的,也會返回True

7. str.isalpha()
檢測字符串是否只由字母組成, 如果字符串至少有一個字符並且所有字符都是字母則返回 True,否則返回 False
str = ‘abc‘
str_result = str.isalpha() #中文字符是被允許的,也會返回True

8. str.isdigit() str.isdecimal() str.isnumeric()
檢測字符串是否只由數字組成, 如果字符串至少有一個字符並且只包含數字則返回 True 否則返回 False
str.isdecimal():判斷字符串是否只包含十進制數字字符,包括多國語言的十進制數字字符表現形式
str.isdigit():判斷字符串是否只包含數字,這裏的數字包括十進制數字和其它特殊數字(如上標數字等),一個數字是擁有如下屬性值的字符:Numeric_Type=Digit或Numeric_Type=Decimal。
str.isnumeric():判斷字符串是否只包含數字字符。數字字符範圍很大,一般來說,數字字符是擁有如下屬性值的字符:Numeric_Type=Digit, Numeric_Type=Decimal或Numeric_Type=Numeric。
str = ‘12345‘
str_result = str.isdigit()
str_result = str.isdecimal()
str_result = str.isnumeric()

9. str.isspace()
檢測字符串是否只由空格或制表符(\t)組成. 是則返回True, 否則返回False
str = ‘ ‘
str_result = str.isspace()

10. str.islower() str.isupper()
檢測字符串中的字母字符是否全部由小寫字母組成. 如果字符串中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫的)字符都是小寫,則返回 True,否則返回 False
isupper()方法檢測字符串中所有的字母是否都為大寫。同樣返回True, 或是False
這兩種方法僅判斷字符串中的字母字符,不理會其它字符。字符串必須至少包含一個字母字符,否則返回False
str = ‘al%an‘
str_result = str.islower()
str_result = str.isupper()

11. str.istitle()
檢測字符串中所有的單詞拼寫首字母是否為大寫,且其他字母為小寫。是則返回 True,否則返回 False.
字符串必須至少包含一個字母字符,否則返回False。即使首字母字符前面有非字母字符,如中文、數字、下劃線等,也不影響對首字母字符的判斷。
str = "Alan Python"
str_result = str.istitle() #"Alan‘s Python" 返回的結果是False

12. str.isidentifier()
判斷字符串是否是合法的標識符,字符串僅包含中文字符合法,實際上相當於判斷的是變量名是否合法
str = "_Alan_Python"
str_result = str.isidentifier()

13. str.isprintable()
判斷字符串所包含的字符是否全部可打印。字符串包含不可打印字符,如轉義字符,將返回False
str = ‘alan\n python‘
str_result = str.isprintable()

三. 格式化類方法,返回一個格式化的新字符串

14. str.lower() str.upper() str.swapcase()
把全部字母字符轉換成小寫 / 大寫,不去管其它非字母字符。字符串全部為非字母字符也是合法的,但返回原字符串.
swapcase()方法把字符串中的大小寫字母互換,大寫轉換成小寫,小寫轉換成大寫。不去管非字母類字符。
str = ‘中國 Alan Xu‘
str_result = str.lower()
str_result = str.upper()
str_result = str.swapcase()

15. str.capitalize()
將字符串的第一個字符轉換為大寫, 其余轉換為小寫
如果字符串首字符為非字母字符,將返回原字符,但其余字符仍轉換為小寫。字符串僅包含非字母字符合法,但返回原字符串。
str = ‘中Alan Xu‘
str_result = str.capitalize()

16. str.title()
字符串中每個單詞的首字母大寫,其余小寫。單詞的首字符為非字母字符也不影響轉換。字符串僅包含非字母字符合法,但返回原字符串
str = ‘中alAn xU‘
str_result = str.title()

17. str.center(width[, fillchar]) str.ljust(width[, fillchar]) str.rjust(width[, fillchar])
返回一個指定的寬度 width 居中 / 左對齊 / 右對齊 的字符串,可選參數fillchar 為填充的字符,默認為空格。 如果 width 小於字符串長度直接返回字符串
str = ‘Alan Xu‘
str_result = str.center(50, ‘*‘) #width為偶數時,fillchar將平均地填充到原字符串的開頭和結尾;為奇數時,fillchar優先填充前面
str_result = str.ljust(50, ‘*‘)
str_result = str.rjust(50, ‘*‘)

18. str.lstrip([chars]) str.rstrip([chars]) str.strip([chars])
返回一個去除了特定字符的新字符串,chars參數是一個字符串,它包含了所有將要被移除的字符集合。默認為空格
從原字符串的 最左邊 / 最右邊 / 兩端 開始,匹配chars裏包含的所有字符,直至遇到第一個非chars字符為止,原字符串中匹配到的所有字符都被移除。
str = ‘alan xu python‘
str_result = str.lstrip(‘a ln‘) #當遇到字符x不屬於‘a ln‘時結束,移除x前的所有字符
str_result = str.rstrip(‘a ln‘)
str_result = str.strip(‘a ln‘)

19. str.expandtabs([tabsize])
把字符串中的所有制表符替換成零個或多個空格,每個制表符替換成多少個空格,由制表符在字符串中的位置和tabsize共同決定。tabsize指定每個制表符替換成的空格數,默認為8個
tr = ‘\t\talanhah\tis hero‘
str_result = str.expandtabs() #制表符的制表位是從每行開頭算起的,所以第三個制表符的制表位是從行首開始的第24個位置,所以就只有1個空格出現

20. str.zfill(width)
返回一個長度為width的字符串,最左邊填充0。如果width小於等於原字符串長度,則返回原字符串。主要用於數字類字符串的格式化。
str = ‘123‘
str_result = str.zfill(8)

21. str.format(*args, **kwargs) str.format_map(mapping)
增強了字符串格式化的功能, 基本語法是通過 {} 和 : 來代替以前的 %
format() 函數可以接受不限個參數,位置可以不按順序。
21.1 通過位置
str_result = ‘{0},{1}‘.format(‘Alan‘, ‘Xu‘) #Alan,Xu
str_result = ‘{},{}‘.format(‘Alan‘, ‘Xu‘) #Alan,Xu (不能出現同時一個{}和一個{1}這樣)
str_result = ‘{1}{0}{1}‘.format(‘Alan‘, ‘Xu‘) #XuAlanXu
21.2 通過關鍵字參數
str_result = ‘我的名字叫:{name},我的年齡:{age}‘.format(name = ‘Alan‘, age = 26)
21.3 通過對象屬性
class person:
def __init__(self, name, age):
self.name, self.age = name, age
def __str__(self):
return ‘我的名字叫:{self.name}, 年齡是:{self.age}‘.format(self = self)
str_result = person(‘Alan‘, 26)
21.4 通過下標
str_list = [‘Alan‘, 26]
str_result = ‘名字:{0[0]}, 年齡:{0[1]}‘.format(str_list)

格式限定符
21.5 填充與對齊
^、<、>分別是居中、左對齊、右對齊,後面帶寬度
:號後面帶填充的字符,只能是一個字符,不指定的話默認是用空格填充
str_result = ‘{:*^16}‘.format(‘alan‘) #******alan******
str_result = ‘{:*<16}‘.format(‘alan‘) #alan************
str_result = ‘{:*>16}‘.format(‘alan‘) #************alan
21.6 精度與類型f
str_result = ‘{:.2f}‘.format(3.1415926) #3.14 其中.2表示長度為2的精度,f表示float類型。
21.7 其他類型
主要就是進制,b、d、o、x分別是二進制、十進制、八進制、十六進制。
str_result = ‘{:b}‘.format(26) #11010
str_result = ‘{:d}‘.format(26) #26
str_result = ‘{:o}‘.format(26) #32
str_result = ‘{:x}‘.format(26) #1a
用,號還能用來做金額的千位分隔符。
str_result = ‘{:,}‘.format(1234567890) #1,234,567,890
用 % 號實現百分比
str_result = ‘{:.2%}‘.format(0.26) #26.00%
指數記法
str_result = ‘{:.2e}‘.format(26) #2.60e+01

str.format_map(mapping)類似 str.format(*args, **kwargs) ,不同的是 mapping 是一個字典對象。
People = {‘name‘:‘alan‘, ‘age‘:26}
str_result = ‘My name is {name},i am {age} old‘.format_map(People) # ‘My name is john,i am 56 old‘

新增1. str.encode(encoding=‘UTF-8‘,errors=‘strict‘)
以 encoding 指定的編碼格式編碼字符串(如"UTF-8")。errors參數可以指定不同的錯誤處理方案。該方法返回編碼後的字符串。
errors -- 設置不同錯誤的處理方案。默認為 ‘strict‘,意為編碼錯誤引起一個UnicodeError。
其他可能的值有 ‘ignore‘, ‘replace‘, ‘xmlcharrefreplace‘, ‘backslashreplace‘ 以及通過 codecs.register_error() 註冊的任何值。
str = ‘我在學習Python‘
str_result = str.encode(‘UTF-8‘,‘strict‘)
str_result.decode(‘UTF-8‘, ‘strict‘) #byte類型 方法 decode()解碼

四. 拆分組合類方法

22. str.partition(sep) str.rpartition(sep)
拆分字符串,返回一個包含三個元素的元組。
如果未能在原字符串中找到Sep,則元組的三個元素為:原字符串,空串,空串;否則,從原字符串中遇到的第一個Sep字符開始拆分,元組的三個元素為:Sep前的字符串,Sep字符,Sep之後的字符串;
rpartition(sep)從原字符串的最右邊開始拆分,返回:倒數第一個Sep之前的字符串,Sep字符,Sep之後的字符串。
str = ‘aabcdefgdeh‘
str_result = str.partition(‘de‘) #sep為空時,會報錯
str_result = str.rpartition(‘de‘)

23. str.split([sep[, maxsplit]]) str.rsplit([sep[, maxsplit]])
返回一個以Sep分隔的列表,maxsplit指定拆分次數(因此,列表中元素的個數為maxsplit + 1)。Sep默認為空格,maxsplit默認不限制拆分次數。
1)如果未指定Sep或指定Sep為None,str兩端的空格將舍棄;如果指定Sep(不管能否在原字符串中找到Sep),str兩端的空格將保留
2)如果未能在原字符串中找到Sep,則返回一個僅包含一個元素的列表,這個元素就是原字符串。
3) str.rsplit()只是從最右邊開始拆分。只有在指定maxsplit的情況下才會看到不同效果
str = ‘ hello alan ‘
str_result = str.split() #結果[‘hello‘, ‘alan‘]
str_result = str.split(‘l‘, 2) #結果[‘ he‘, ‘‘, ‘o alan ‘]
str_result = str.rsplit(‘l‘, 2) #結果[‘ hel‘, ‘o a‘, ‘an ‘]

24. str.join(iterable)
以指定字符串str作為分隔符,將iterable對象中所有的元素(字符串表示)合並為一個新的字符串. 如果傳入一個非iterable對象,如整數、布爾值等,將返回Type Error。
iterable object或iterator type最主要的特征是支持兩個函數:__iter__()和__next__(),雖然不是很準確,但可以簡單的認為支持使用for語句逐個取值的數據類型都是叠代器對象。
sequence type(六種:strings、byte objects、byte arrays、lists、tuples、range objects)和dictionary都屬於iterable對象
str = ‘ab‘
str_result = str.join(‘cdef‘) #結果cabdabeabf (即:cab dab eab f)

25. str.splitlines([keepends])
拆分一個包含多行的字符串,以每行為一個元素返回一個列表。如果字符串不是多行,則返回原字符串。keepends是一個True字符或非零整數,表示保留行尾標誌(即換行符)。該方法多用於處理文件。
str = ‘‘‘ab
cd
ef‘‘‘
str_result = str.splitlines()

字符串方法實際操作
技術分享
str = "my     name is {name} and age is {year}!"
str1 = "Abc123AA bb"
str2 = ‘‘‘aa
bb
cc‘‘‘
str3 = 我愛中國
strs = str.format(name="Alan",year=26)  
table = strs.maketrans(ma, nb, n)
print(strs)

print(\n 一. 查找 & 替換類方法 \n)

print(字符串strs中 a 出現的次數:, strs.count("a"))                   
print(字符串strs中 a 首次出現的位置:, strs.find(a))                
print(字符串strs中從右向左 a 首次出現的位置:, strs.rfind(a))
print(字符串strs中 a 首次出現的位置:, strs.index(a))               
print(字符串strs中從右向左 a 首次出現的位置(rindex):, strs.rindex(a))
print(字符串strs中字符 a 被替換為 z 後生成的新字符串(replace):, strs.replace(a, z))  
print(字符串strs中的部分字符被替換後的新字符串(translate):, strs.translate(table))   

print(\n 二. 判斷類方法,通常返回True和False \n)

print(字符串str1中是否以 Ab 開頭:, str1.startswith(Ab)) 
print(字符串str1中是否以 bb 結尾:, str1.endswith(bb))
print(字符串str1是否是由字母和數字組成:, str1.isalnum())
print(字符串str1是否是由字母組成:, str1.isalpha())
print(字符串str1是否是由數字組成,並在十進制整數的範圍:, str1.isdecimal())
print(字符串str1是否是由數字組成,並在整數的範圍:, str1.isdigit())
print(字符串str1是否是由數字組成,並在整數的範圍:, str1.isnumeric())
print(字符串str1是否是全有空格或是制表符組成:, str1.isspace())
print(字符串str1是否是全是大寫字母組成:, str1.isupper())
print(字符串str1是否是全是小寫字母組成:, str1.islower())
print(字符串str1中單詞首字母是否都是大寫,並且其余字符都為小寫:, str1.istitle())
print(字符串str1是否是合法的標識符:, str1.isidentifier())
print(字符串str1是否能夠被打印:, str1.isprintable())

print(\n 三. 格式化類方法,返回一個格式化的新字符串 \n)

print(將字符串str1中的字符全部轉換成小寫:, str1.lower())
print(將字符串str1中的字符全部轉換為大寫:, str1.upper())
print(將字符串str1中的字符大小寫互換:, str1.swapcase())
print(將字符串str1首字母大寫,其余字母小寫:, str1.capitalize())
print(將字符串str1中的每個單詞首字母大寫,其余字母小寫:, str1.title())
print(將字符串str1按照指定長度居中顯示,並用*號填充:, str1.center(50, *))
print(將字符串str1按照指定長度左對齊顯示,並用*號填充:, str1.ljust(50, *))
print(將字符串str1按照指定長度左對齊顯示,並用*號填充:, str1.rjust(50, *))
print(將字符串str1中指定字符從兩端移除:, str1.strip(Ab C))
print(將字符串str1中指定字符從左邊移除:, str1.lstrip(Ab C))
print(將字符串str1中指定字符從右邊移除:, str1.rstrip(Ab C))
print(將字符串中的制表符轉換為空格:, ab\tcd.expandtabs())
print(將數字類字符串返回指定長度:, 12345.zfill(9))
print(將字符串以UTF-8格式重新編碼:, str3.encode(UTF-8, strict))

print(\n 四. 拆分組合類方法 \n)

print(將字符串拆分為一個三個元素的元組:, str1.partition(23))
print(將字符串從右邊開始拆分為一個三個元素的元組:, str1.rpartition(23))
print(將字符串以指定字符串分隔為一個列表:, str1.split(A))
print(將字符串從右邊以指定字符串分隔為一個列表:, str1.rsplit(A, 2))
print(以指定字符串作為分隔符將字符串中的每一個字符分隔組合成新字符串:, 中國.join(str1))
print(將多行字符串拆分為一個列表:, str2.splitlines())
View Code

 

Python - 字符串的操作方法