String(字符串)作為Python中的基礎(chǔ)數(shù)據(jù)類型之一,在每個(gè)項(xiàng)目中都必然會(huì)用到。我們經(jīng)常需要對(duì)字符串進(jìn)行一些列的操作,比如:拼接、查找、比較、設(shè)置對(duì)齊、拆分、截取、搜索、替換、組合、編碼等等操作。那么,對(duì)于字符串的操作有個(gè)一個(gè)詳細(xì)地了解就顯得十分必要。以下是部分String的操作方法:
大小寫操作
在英文中、頁面的展示中,我們經(jīng)常需要對(duì)字符串進(jìn)行大小寫轉(zhuǎn)換的操作。如全部轉(zhuǎn)換成大寫、小寫、首字母大寫等。
全部轉(zhuǎn)換成大寫 -> string.upper()
str = 'louis drink'
str.upper() # 'LOUIS DRINK'
使用upper()方法,會(huì)將字符串中的所有英文字母轉(zhuǎn)換成大寫格式。
全部轉(zhuǎn)換成小寫 -> string.lower()
str = 'LOUIS DRINK'
str.lower() # 'louis drink'
使用lower()方法,會(huì)將字符串中的所有英文字母轉(zhuǎn)換成小寫格式。
首字母大寫 -> string.capitalize()
str = 'louis drink'
str.capitalize() # 'Louis drink'
使用capitalize()方法,會(huì)將整個(gè)字符串的首字母轉(zhuǎn)換成大寫格式。
所有單詞首字母大寫 -> string.title()
str = 'louis drink'
str.title() # 'Louis Drink'
使用title()方法,會(huì)將整個(gè)字符串中的每一個(gè)單詞的首字母轉(zhuǎn)換成大寫格式。
查詢 -> string.index() / string.find()
Python3中的字符串的查詢有兩種方法,分別是string.index()與string.find方法。兩者有細(xì)微差別:
name = 'Louis Drink'
name.index('i') # 3
name.index('a') # 崩潰
name.find('i') # 3
name.find('a') # -1
從上述代碼中,我們不難看出,當(dāng)查詢字符串中確定有的子字符串的情況下,string.index()方法和string.find()的方法沒有區(qū)別,都是返回的字符串中所含有的子字符串的首字母的下標(biāo)位置。
然而當(dāng)在查詢字符串中沒有含有的子字符串的情況下,string.index()方法會(huì)直接崩潰,而string.find()方法是返回一個(gè)int類型的數(shù)字-1。在這種情況下,顯然string.find()方法會(huì)更具有容錯(cuò)性,所以在開發(fā)中,推薦使用string.find()方法。
統(tǒng)計(jì) -> string.count()
name = 'Louis Drink'
name.count('i') # 2
string.count()方法是用來統(tǒng)計(jì),該子字符串在字符串中出現(xiàn)的次數(shù)。如我們?cè)谏鲜隼又校y(tǒng)計(jì)字符串'i'在name中出現(xiàn)了幾次。返回結(jié)果2則表示'i'在name中,一共出現(xiàn)了兩次。
字符串拼接
我們?cè)谡{(diào)試、展示頁面、返回信息的時(shí)候,經(jīng)常會(huì)使用固定語句格式拼接上一些我們的變量,如,'歡迎{人名}蒞臨檢查!'中,人名就是一個(gè)變量。那么字符串的拼接有幾種方法呢?
使用+直接拼接
first_name = 'Drink'
last_name = 'Louis'
str = last_name + ' ' + first_name # 'Louis Drink'
幾個(gè)字符串可以直接使用+來拼接起來,格式就如上述代碼所示。
使用占位符拼接
name = 'Drink'
place = 'Xiamen'
'Hello %s, welcome to %s!' %(name, place)
# 'Hello Drink, welcome to Xiamen!'
這里使用%s占位符,表示在該地方需要拼接入一個(gè)字符串參數(shù)。同時(shí)這里也可以替換成其他的占位符,詳細(xì)的占位符信息請(qǐng)查看:Python3中的占位符詳解。
使用格式碼拼接 -> string.format()
name = 'Drink'
place = 'Xiamen'
'Hello {}, welcome to {}!' .format(name, place)
# 'Hello Drink, welcome to Xiamen!'
使用.format方法的話,可以直接用{}代替占位符,來標(biāo)記我們需要添加信息的位置。每一個(gè){}對(duì)應(yīng)一個(gè)需要拼接的地方,所以后面.format里的參數(shù)一定要與前邊的{}數(shù)量一致。
.format()拼接還有另一種更清晰的方式,但是使用起來相對(duì)麻煩。
name = 'Drink'
place = 'Xiamen'
'Hello {person_name}, welcome to {person_city}!' .format(person_name = name, person_place = place)
# 'Hello Drink, welcome to Xiamen!'
Python3中特有的拼接方式
name = 'Drink'
place = 'Xiamen'
f'Hello {name}, welcome to {place}!'
# 'Hello Drink, welcome to Xiamen!'
我們可以在字符串前加個(gè)字母f,然后直接在字符串中的{}中填入我們需要拼接的變量名稱,就可以直接拼接。使用這種方法,無需在字符串后面再去書寫%(變量名)或.format(變量名)。會(huì)更為簡(jiǎn)潔和清晰。推薦使用這種方法!
對(duì)齊 -> string.center() / string.ljust() / string.rjust()
在開發(fā)中,為了保證美觀,我們常常會(huì)需要使字符串居中、左對(duì)齊、右對(duì)齊等,這就需要用到對(duì)齊的操作方法。
name = 'Louis Drink'
name.center(40) # ' Louis Drink '
name.ljust(40, '-') # 'Louis Drink-----------------------------'
name.rjust(40, ) # ' Louis Drink'
從上述的代碼中不難看出,string.center(), string.ljust(), string.rjust分別是對(duì)應(yīng)居中對(duì)齊、左對(duì)齊、右對(duì)齊的方法。每個(gè)方法都有兩個(gè)參數(shù):
- 第一個(gè)參數(shù):width(寬度)(必填)
- 第二個(gè)參數(shù):填充符(不填默認(rèn)填充空格)
以什么結(jié)束 -> string.endswith()
name = 'Louis Drink'
name.endswith('k') # True
name.endswith('nk') # True
name.endswith('i') # False
使用string.endswith()方法時(shí),會(huì)去判斷字符串的最后的子字符串與你在方法中填入的字符串是否相同。結(jié)果返回bool類型的True或False。
判斷
'123'.isalnum() # True
'123abc'.isalnum() # True
'123.abc'.isalnum() # False
'abc'.isalpha() # True
'123abc'.isalpha() # False
'123'.isdigit() # True
'123.123'.isdigit() # False
'abc'.isidentifier() # True
'abc123'.isidentifier() # True
'123abc'.isidentifier() # False
'123'.isidentifier() # False
''abc.123'.isidentifier()' # False
'LOUIS DRINK'.isupper() # True
'Louis Drink'.isupper() # False
'louis drink'.islower() # True
'Louis Drink'.islower() # False
'123'.isdecimal() # True
'一二三'.isdecimal() # False
'一二三'.isnumeric() # True
在字符串中,有幾種比較常見的判斷方法,分別是:
- string.isalnum() -> 判斷字符串中是否全部為數(shù)字或者英文
- string.isalpha() -> 判斷字符串中是否全部為純英文字符
- string.isdigit() -> 判斷字符串中是否全部為整數(shù)
- string.isidentifire() -> 判斷字符串是不是一個(gè)合法的標(biāo)識(shí)符
- string.isupper() -> 判斷字符串中是否全是大寫字母
- string.islower() -> 判斷字符串中是否全是小寫字母
- string.isdecimal() -> 判斷是否是十進(jìn)制數(shù)字
- string.isnumeric() -> 判斷是否是可做標(biāo)記用的數(shù)字,包含數(shù)字、分?jǐn)?shù)、特殊標(biāo)記字符和中文,但不包含英文
- 判斷范圍:string.isnumeric() > string.isdigit() > string.isdecimal()
Tips 標(biāo)識(shí)符的規(guī)則:
- 必須以字母或下劃線開始
- 不能與保留字相同
- 避免與Python中已有的標(biāo)識(shí)符相同
替換 -> string.replace()
name = 'Louis Drink'
name.replace('Drink', 'Lu', 1) # 'Louis Lu'
使用string.replace()方法的時(shí)候,需要傳三個(gè)參數(shù),他們依次分別是:
- 第一個(gè)參數(shù):old_value,就是字符串中現(xiàn)有的要替換的內(nèi)容
- 第二個(gè)參數(shù):new_value,就是要將現(xiàn)有內(nèi)容替換掉的內(nèi)容
- 第三個(gè)參數(shù):count,就是要替換的個(gè)數(shù)
如上述例子中,我們要把現(xiàn)有的'Drink'替換成'Lu',替換的個(gè)數(shù)為1。
Tips:最后的count可不填,如果不填寫數(shù)量的話,默認(rèn)替換掉字符串中所有的old_value。
拆分 -> string.split()
mail = 'louisdrink@163.com'
mail.split('@') #['louisdrink', '163.com']
使用string.split()方法的時(shí)候,會(huì)先去判斷該字符串里面有沒有我們要拆分的字符。
如果有的話,會(huì)返回一個(gè)列表,里面包含兩個(gè)字符串,分別是我們要拆分的字符之前的字符串和之后的字符串,但不包含我們要拆分的字符。
如果沒有的話,仍然會(huì)返回一個(gè)列表,但是列表里只有一個(gè)元素,那就是我們?cè)疽M(jìn)行拆分的字符串。
另外,還有個(gè)方法是換行拆分:string.splitlines()。用途是,如果該字符串里有換行符的話,會(huì)按換行符前后自動(dòng)拆分成一個(gè)個(gè)元素,然后組成一個(gè)列表。如果沒有換行符,仍然返回一個(gè)元素的列表。
連接列表 ->string.join()
singers = ['周杰倫', '林俊杰', '陳奕迅', '李宗盛', '薛之謙']
'--'.join(singers) # '周杰倫--林俊杰--陳奕迅--李宗盛--薛之謙'
使用string.join()來連接字符串列表,會(huì)將字符串、元組、列表中的元素以指定的字符(分隔符)連接成一個(gè)新的字符串。
去除空格或指定字符 -> string.strip()
name = ' Louis Drink '
name.strip() # 'Louis Drink'
name.lstrip() # 'Louis Drink '
name.rstrip() # ' Louis Drink'
name = 'Louis Drink'
name.lstrip('L') # 'ouis Drink'
name.rstrip('k') # 'Louis Drin'
使用string.strip系列方法,需要注意一下幾個(gè)點(diǎn):
- string.strip()系列方法,可填要?jiǎng)h除的字符串,如果不填字符串,則默認(rèn)刪除空格
- string.strip()為刪除兩邊開始的指定字符串
- string.lstrip()為刪除左邊開始的指定字符串
- string.rstrip()為刪除右邊開始的指定字符串
- 如果指定字符串在句子中間,則不會(huì)被刪除