Python String 方法详解
官網(wǎng)文檔地址:https://docs.python.org/3/library/stdtypes.html#string-methods
?官網(wǎng)
公號(hào):軟測(cè)小生ruancexiaosheng
文檔里的所有String的方法都在下面,基于 Python 3.X 版本,截止日期是2017/10/12日,之后的可能會(huì)有更新。花了一天的時(shí)間學(xué)習(xí)并記錄了一下
4.7.1. String Methods
str.capitalize() --> String 返回字符串,其首字母大寫,其余部分小寫
1>>> str = "TEST" 2>>> str1= "test" 3>>> print(str + "-->" + str.capitalize() +'\n' + "-->" + str + str1.capitalize()) 4 TEST-->Test 5 TEST-->Teststr.casefold() --> String 字符串轉(zhuǎn)換成小寫,用于不區(qū)分大小寫的字符串比較
1>>> str = "TESTtest" 2>>> print(str.casefold()) 3 testteststr.center(width[,?fillchar]) -->String 指定長(zhǎng)度(此處是長(zhǎng)度并不是索引值)填充字符
1>>> str = "Python" 2>>> print(str.center(7,'t')) 3>>> print(str.center(8,'8')) 4>>> print(str.center(9,'9')) 5>>> print(str.center(10,'X'))# 6 tPython 7 8Python8 8 99Python9 9 XXPythonXXstr.count(sub[,?start[,?end]]) --> int 查找某字符串(sub)出現(xiàn)的次數(shù) ,也可以查找在某個(gè)位置范圍 [2,6] 內(nèi)出現(xiàn)子字符串的次數(shù)
1 >>>str = "Pythont" 2 >>>sub = "t" 3 >>>print(str.count(sub))#查找‘t’在“Pythont”中出現(xiàn)的次數(shù) 4 2 5 >>>print(str.count(sub,2,6))#在[2,6]范圍 內(nèi)出現(xiàn)的次數(shù) 6 1?str.encode(encoding="utf-8",?errors="strict") --> Object 以指定的編碼格式解碼字符串。默認(rèn)編碼為字符串編碼(適合python2中處理中文)
1>>> str = "中文" 2>>> sub = "test" 3>>> print(str.encode(encoding='utf_8', errors='strict')) 4 b'\xe4\xb8\xad\xe6\x96\x87' 5>>> print(sub.encode(encoding='utf_8', errors='strict')) 6 b'test'?str.endswith(suffix[,?start[,?end]]) ?--> Bool(True or False) 用于判斷字符串是否以指定后綴結(jié)尾,如果以指定后綴結(jié)尾返回True,否則返回False。
可選參數(shù)"start"與"end"為檢索字符串的開(kāi)始與結(jié)束位置
1>>> str = "TestPython" 2>>> sub = "test" 3>>> print(str.endswith('on'))# 判斷該字符串以指定后綴‘on’結(jié)尾 4 True 5>>> print(str.endswith("t",4,7))#判斷4位置以‘t’開(kāi)始,7位置以‘t’結(jié)尾 6 True 7>>> print(str.endswith("t",4,9)) 8 False?str.expandtabs(tabsize=8) --> String 將字符串中的tab符號(hào)('\t')轉(zhuǎn)換為空格,默認(rèn)的空格數(shù)是8;tabsize?--?指定轉(zhuǎn)換字符串中的?tab?符號(hào)('\t')轉(zhuǎn)為空格的字符數(shù)。
1 >>> '01\t012\t0123\t01234'.expandtabs() 2 '01 012 0123 01234' 3 >>> '01\t012\t0123\t01234'.expandtabs(4) 4 '01 012 0123 01234'?
?str.find(sub[,?start[,?end]]) --> int 檢測(cè)字符串中是否包含子字符串,如果指定?beg(開(kāi)始)和?end(結(jié)束)范圍,則檢查是否包含在指定范圍內(nèi),如果包含子字符串,則返回開(kāi)始的索引值(下標(biāo),從0開(kāi)始),否則返回-1。
?str.rfind(sub[,?start[,?end]]) --> int ? ? ??返回字符串最后一次出現(xiàn)的位置,如果沒(méi)有匹配項(xiàng)則返回-1。
>>> s = 'lilin is good li lao ban'
>>> s.rfind('li')
14
>>> s.rfind('li',0,8)
2
?
?注意:只有當(dāng)你知道子字符串的位置時(shí)才是用find()方法。如果你需要檢測(cè)子字符串是否包含,請(qǐng)至少用 in 運(yùn)算符:
1 >>> 'Py' in 'Python' 2 True?
?str.format(*args,?**kwargs) --> String? 格式換字符串輸出(方法與%相似,但可以指定順序) 仔細(xì)閱讀下面的例子
1 >>> str = "programmer" 2 >>> sub = "Python" 3 >>> print('I am a {}, and learn {}'.format(str,sub)) 4 I am a programmer, and learn Python 5 >>> print('I am a {1}, and learn {0}'.format(str,sub)) 6 I am a Python, and learn programmer 7 >>> print('I am a {name}, and learn {tool}'.format(name = str,tool = sub)) 8 I am a programmer, and learn Python?str.format_map(mapping) ?--> String? 執(zhí)行字符串格式化操作,替換字段使用{}分隔,同str.format(**mapping), 除了直接使用mapping,而不復(fù)制到一個(gè)dict
1 >>> name = "Peter" 2 >>> country = "China" 3 >>> print('I\'m {name} and bron in {country}.'.format_map(vars())) 4 I'm Peter and bron in China. 5 6 >>> str = "programmer" 7 >>> sub = "Python" 8 >>> print('I am a {str}, and learnning {sub}.'.format_map(vars())) 9 I am a programmer, and learn Python.注: 此方法 出于 Python 3.2 之后
str.index(sub[,?start[,?end]]) --> int? 檢測(cè)字符串string中是否包含子字符串?sub,如果存在,則返回sub在string中的索引值(下標(biāo)),如果指定began(開(kāi)始)和?end(結(jié)束)范圍,則檢查是否包含在指定范圍內(nèi),該方法與?python?find()方法一樣,只不過(guò)如果str不在?string中會(huì)報(bào)一個(gè)異常(ValueError:?substring?not?found)。
>>> str = "programmer" >>> print(str.index('m')) 6 >>> print(str.index('m',6,9)) 6 >>> print(str.index('m',7,9)) 7?
?
字符串條件判斷:
str.isalnum() --> Bool (True or False) 判斷字符串String是否由字符串或數(shù)字組成,并且至少有一個(gè)字符(不為空)簡(jiǎn)而言之:只要?c.isalpha(),?c.isdecimal(),?c.isdigit(),?c.isnumeric()?中任意一個(gè)為真,則?c.isalnum()?為真。
'dobi'.isalnum() # True 'dobi123'.isalnum() # True '123'.isalnum() # True '張'.isalnum() # True 'dobi_123'.isalnum() # False 'dobi 123'.isalnum() # False '%'.isalnum() # Falsestr.isalpha() -->Bool (True or False)? 判斷字符串String是否只由字母組成,并且至少有一個(gè)字符(不為空)
str.isdecimal()小數(shù); str.isdigit()數(shù)字; str.isnumeric()數(shù)值 -->Bool (True or False)? 判斷字符串String是否只由小數(shù)/數(shù)字/數(shù)值組成,并且至少有一個(gè)字符(不為空)
三個(gè)方法的區(qū)別在于對(duì) Unicode 通用標(biāo)識(shí)的真值判斷范圍不同:
isdecimal: Nd, ? (小數(shù)) ?all decimals are digits, but not all digits are decimals(所有小數(shù)都是數(shù)字,但不是全部數(shù)字都是小數(shù))
isdigit: No, Nd, ?(數(shù)字)
isnumeric: No, Nd, Nl ?(數(shù)值)
digit?與?decimal?的區(qū)別在于有些數(shù)值字符串,是?digit?卻非?decimal?,具體戳?這里
str.isidentifier()?-->Bool (True or False) 判斷字符串中是否是有效標(biāo)識(shí)符
'def'.isidentifier() # True 'with'.isidentifier() # True 'false'.isidentifier() # True 'dobi_123'.isidentifier() # True 'dobi 123'.isidentifier() # False '123'.isidentifier() # False?
str.islower()?-->Bool (True or False) 判斷字符串中是否是有效標(biāo)識(shí)符
?
?str.isprintable()?-->Bool (True or False) 判斷字符串的所有字符都是可打印字符或字符串為空。Unicode 字符集中 “Other” “Separator” 類別的字符為不可打印的字符(但不包括 ASCII 的空格(0x20))。
?
str.isspace() ?-->Bool (True or False) 檢測(cè)字符串是否只由空格組成,并且至少有一個(gè)字符(判斷字符串中是否至少有一個(gè)字符,并且所有字符都是空白字符。)
'\r\n\t'.isspace() #True ''.isspace() #False ' '.isspace() #Truestr.istitle() -->Bool (True or False) ?判斷字符串中的字符是否是首字母大寫,且其他字母為小寫,其會(huì)忽視非字母字符
str.isupper() ?-->Bool (True or False) 檢測(cè)字符串中所有的字母是否都為大寫
?
?
字符串的聯(lián)合與分割:
str.join(iterable) ? ? ? --> String 用指定的字符串,連接元素為字符串的可迭代對(duì)象。
'-'.join(['2012', '3', '12']) # '2012-3-12' '-'.join([2012, 3, 12]) # TypeError: sequence item 0: expected str instance, int found '-'.join(['2012', '3', b'12']) #bytes 為非字符串 # TypeError: sequence item 2: expected str instance, bytes found '-'.join(['2012']) # '2012' '-'.join([]) # '' '-'.join([None]) # TypeError: sequence item 0: expected str instance, NoneType found '-'.join(['']) # '' ','.join({'dobi':'dog', 'polly':'bird'}) # 'dobi,polly' ','.join({'dobi':'dog', 'polly':'bird'}.values()) # 'dog,bird'?
?
str.ljust(width[, fillchar]); ?str.rjust(width[, fillchar])
返回指定長(zhǎng)度的字符串,字符串內(nèi)容居左(右)如果長(zhǎng)度小于字符串長(zhǎng)度,則返回原始字符串,默認(rèn)填充為 ASCII 空格,可指定填充的字符串。
?width?--?指定填充指定字符后新字符串的總長(zhǎng)度.
?fillchar–?要填充的字符,默認(rèn)為空格。
print('dobi'.ljust(10)) # 'dobi ' print('dobi'.ljust(10, '*')) # 'dobi~~~~~~' print('dobi'.ljust(3, '~')) # 'dobi' print('dobi'.ljust(3)) # 'dobi' print('dobi'.rjust(10)) #' dobi' print('dobi'.rjust(10,'@')) #'@@@@@@dobi' print('dobi'.rjust(3,'@')) #'dobi' print('dobi'.rjust(3)) #'dobi'?
str.lower() -->String? 字符串轉(zhuǎn)換成小寫 ? ?其僅對(duì)?ASCII?編碼的字母有效。
print('PYTHON'.lower()) #'python' print('Python'.lower()) #'python' print('?'.lower()) # '?' 為德語(yǔ)小寫字母,其有另一種小寫 'ss', lower 方法無(wú)法轉(zhuǎn)換 #'?' print('張PYTHON'.lower()) #'張python'?
str.lstrip([chars]); ? ?str.rstrip([chars]); ? ?str.strip([chars]) ? --> ?string?or?unicode
去掉(刪除)字符串后面 / 前面/ 兩邊 的空格(默認(rèn)是空格),或參數(shù)中的字符
print(' Python '.lstrip()) #'Python ' print('Test Python lstrip'.lstrip('Test'))#去掉前面的參數(shù)中的字符'Test' #' Python lstrip' print(' Python '.rstrip()) #' Python' print(' Python '.strip()) #'Python'static?str.maketrans(x[,?y[,?z]]) ? ?str.translate(table)
maktrans?是一個(gè)靜態(tài)方法,用于生成一個(gè)對(duì)照表,以供?translate?使用。
如果?maktrans?僅一個(gè)參數(shù),則該參數(shù)必須是一個(gè)字典,字典的 key 要么是一個(gè) Unicode 編碼(一個(gè)整數(shù)),要么是一個(gè)長(zhǎng)度為 1 的字符串,字典的 value 則可以是任意字符串、None或者 Unicode 編碼。
如果?maktrans?有兩個(gè)參數(shù),則兩個(gè)參數(shù)形成映射,且兩個(gè)字符串必須是長(zhǎng)度相等;如果有第三個(gè)參數(shù),則第三個(gè)參數(shù)也必須是字符串,該字符串將自動(dòng)映射到?None:
這里插一嘴:Python2.x和3.x下maketrans與translate函數(shù)使用上的不同
看一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明字符串轉(zhuǎn)換的過(guò)程:
??? 2.X下的演示過(guò)程:
??? 3.X下的演示過(guò)程:
>>> map = str.maketrans('123','abc') >>> s = '54321123789' >>> s.translate(map) '54cbaabc789'?2.X使用了string的maketrans函數(shù),而3.X使用了str的maketrans函數(shù),除了這一點(diǎn),使用方法是基本相同的。若指定字符串中要?jiǎng)h除的字符時(shí),使用就會(huì)略有不同,如下:
??? 2.X下的演示過(guò)程:
??? 3.X下的演示過(guò)程:
>>> map = str.maketrans('123','abc', '78')#要?jiǎng)h除的字符需要在這指定 >>> s = '54321123789' >>> s.translate(map) '54cbaabc9'?str.partition(sep) -->?(head,?sep,?tail)? 根據(jù)指定的分隔符將字符串進(jìn)行分割(返回一個(gè)3元的元組,第一個(gè)為分隔符左邊的子串,第二個(gè)為分隔符本身,第三個(gè)為分隔符右邊的子串)
注:str.partition(sep) 是從前往后查找 (從左往右)
str.rpartition(sep) ?是從后面開(kāi)始查找 (從右往左)
與?find()?rfind()?類似,不同的是如果找不到,就會(huì)引發(fā)?ValueError。
str.index(sub[, start[, end]]); --> String ? ?? ?把字符串中的?old(舊字符串)替換成?new(新字符串),如果指定第三個(gè)參數(shù)max,則替換不超過(guò)?max?次。str.rindex(sub[, start[, end]]) --> String 返回子字符串?str?在字符串中最后出現(xiàn)的位置,如果沒(méi)有匹配的字符串會(huì)報(bào)異常,你可以指定可選參數(shù)[beg:end]設(shè)置查找的區(qū)間。
str = 'this is replace old old old text'
print(str.replace('old', 'new'))
#this is replace new new new text
print(str.replace('old', 'new',1))#指定只替換幾個(gè)
#this is replace new old old text
print(str.replace('old', 'new',2))
#this is replace new new old text print(str.rindex('old',10,20))#查找最后出線的位置(下標(biāo))
#'16'
print(str.rindex('s',0,7))#
#'6' ??str.split(sep=None,?maxsplit=-1) --> list 通過(guò)指定分隔符對(duì)字符串進(jìn)行切片,如果參數(shù)num有指定值,則僅分隔?num?個(gè)子字符串?
?str.rsplit(sep=None,?maxsplit=-1) ? ? ? ? ?從后往前
如果字符串開(kāi)頭/結(jié)尾包含空格字符串則以非空格字符串后的第一個(gè)空格為分隔符
print('1,2,3'.split(','), '1, 2, 3'.rsplit())#split從前往后; rsplit從后往前
#['1', '2', '3'] ['1,', '2,', '3']#如果參數(shù)num有指定值,則僅分隔 num 個(gè)子字符串
print('1,2,3'.split(',', maxsplit=1), '1,2,3'.rsplit(',', maxsplit=1))#此處的意思就是僅分隔1次(最多分拆次數(shù))
#['1', '2,3'] ['1,2', '3']print('1 2 3'.split(), '1 2 3'.rsplit())#此處是以默認(rèn)值分隔,默認(rèn)值為空格
#['1', '2', '3'] ['1', '2', '3']print('test test test'.split(maxsplit=1), '1 2 3'.rsplit(maxsplit=1))#此處直接寫拆分次數(shù),那么就是默認(rèn)值(空格)分隔
#['test', 'test test'] ['1 2', '3']print(' tttt test test '.split(), ' tttt test test '.rsplit())#如果字符串開(kāi)頭/結(jié)尾包含空格字符串則以非空格字符串后的第一個(gè)空格為分隔符
#['tttt', 'test', 'test'] ['tttt', 'test', 'test']print('1,2,,,3,'.split(','), '1,2,,,3,'.rsplit(','))
#(['1', '2', '', '', '3', ''] ['1', '2', '', '', '3', ''])print(''.split())
#[]print(''.split('a'))
#['']print('bcd'.split('a'))
#['bcd']print('bcd'.split(None))
#['bcd'] str.splitlines([keepends]) ?--> List 字符串以換行符為分隔符拆分,去掉行界符;如果keepends為True,保留行界符,能被識(shí)別的行界符參照官方文檔
print('HOW\nSOFT\nWORKS'.splitlines())#字符串以換行符為分隔符拆分,去掉換行符;
#['HOW', 'SOFT', 'WORKS']
print('HOW\nSOFT\nWORKS'.splitlines(True))#如果keepends為True,保留換行符
#['HOW\n', 'SOFT\n', 'WORKS']print(''.splitlines(), ''.split('\n'))#注意兩者的區(qū)別
#([] [''])
print("One line\n".splitlines(), "Two line\n".split('\n'))#注意兩者的區(qū)別
#(['One line'] ['Two line', '']) ?能被識(shí)別的行界符:
| \n | Line Feed ? 換行 |
| \r | Carriage Return 回車 |
| \r\n | Carriage Return + Line Feed ?回車+換行 |
| \v?or?\x0b | Line Tabulation ? |
| \f?or?\x0c | Form Feed 換頁(yè) |
| \x1c | File Separator?文件分隔符 |
| \x1d | Group Separator ?組分隔符 |
| \x1e | Record Separator?記錄分隔符號(hào) |
| \x85 | Next Line (C1 Control Code) |
| \u2028 | Line Separator ?行分隔符 |
| \u2029 | Paragraph Separator?段落分隔符號(hào) |
?
str.startswith(prefix[,?start[,?end]]) --> Bool (true or false) 用于檢查字符串是否是以指定子字符串開(kāi)頭,如果是則返回?True,否則返回?False。如果參數(shù)?beg?和?end指定值,則在指定范圍內(nèi)檢查。
print('Learn python in cnblogs'.startswith('Learn'))
#True
print('Learn python in cnblogs'.startswith('test'))
#False
print('Learn python in cnblogs'.startswith('python',6,12))
#True
print('Learn python in cnblogs'.startswith('python',1,5))
#False ?
?
str.swapcase() -- > String ??用于對(duì)字符串的大小寫字母進(jìn)行反轉(zhuǎn)(小寫轉(zhuǎn)大寫,大寫轉(zhuǎn)小寫)
print('張Dobi a123 ?'.swapcase())#這里的 ? 被轉(zhuǎn)成 SS 是一種大寫
#張dOBI A123 SS 但需要注意的是?s.swapcase().swapcase() == s?不一定為真:
u'\xb5' # 'μ' u'\xb5'.swapcase() # 'Μ' u'\xb5'.swapcase().swapcase() # 'μ' hex(ord(u'\xb5'.swapcase().swapcase())) Out[154]: '0x3bc'這里?'Μ'(是 mu 不是 M) 的小寫正好與?'μ'?的寫法一致。
str.strip([chars]) -->String ? 返回"標(biāo)題化"的字符串,就是說(shuō)所有單詞都是以大寫開(kāi)始,其余字母均為小寫。
?
str.upper() -->String 將字符串所有字母變?yōu)榇髮?#xff0c;會(huì)自動(dòng)忽略不可轉(zhuǎn)成大寫的字符。
print('學(xué)習(xí)Python 1 day !!!'.upper()) #學(xué)習(xí)PYTHON 1 DAY !!!str.zfill(width) --> String? 用 '0' 填充字符串,并返回指定寬度的字符串。
注:正常一般是從字符串的左邊開(kāi)始填充,如指定長(zhǎng)度小于字符串長(zhǎng)度則返回原字符串
print('A'.zfill(5))
#0000A
print('--'.zfill(5))
#-000-
print('\'\''.zfill(5))
#000''
print('AAAAAAAAAAAA'.zfill(6))
#AAAAAAAAAAAA
print('AAAAAAAAAAAA'.zfill(15))
#000AAAAAAAAAAAA ?
轉(zhuǎn)載于:https://www.cnblogs.com/PeterZhang1520389703/p/7647160.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Python String 方法详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 盒马:第三财季同店销售实现双位数增长
- 下一篇: pyCharm运行python提示“pl