09-字符串操作

字符串操作

1. 獲取字符串長(zhǎng)度

1. 1 len(str) : 用于指定要進(jìn)行長(zhǎng)度統(tǒng)計(jì)的字符串。
x = 'abcdef'
len(x)  # out: 6


1. 2 獲取字符串的字節(jié)數(shù) : len(str.encode())

在 Python 中,不同的字符所占的字節(jié)數(shù)不同,數(shù)字、英文字母、小數(shù)點(diǎn)、下劃線以及空格,各占一個(gè)字節(jié),而一個(gè)漢字可能占 2~4 個(gè)字節(jié),具體占多少個(gè),取決于采用的編碼方式。

漢字在 GBK/GB2312 編碼中占用 2 個(gè)字節(jié),而在 UTF-8 編碼中一般占用 3 個(gè)字節(jié)。

獲取采用 UTF-8 編碼的字符串的長(zhǎng)度

str1 = "人生苦短,我用Python"  
len(str1.encode())  # out: 27

獲取采用 GBK 編碼的字符串的長(zhǎng)度

str2 = "人生苦短,我用Python"  
len(str2.encode('gbk'))  # out: 20


2. 截取字符串(字符串切片)方法

2. 1 獲取單個(gè)字符

語(yǔ)法格式:str_name[index]

str_name 表示字符串名字,index 表示索引值。

Python 允許從字符串的兩端使用索引:

  • 當(dāng)以字符串的左端(字符串的開(kāi)頭)為起點(diǎn)時(shí),索引是從 0 開(kāi)始計(jì)數(shù)的
  • 當(dāng)以字符串的右端(字符串的末尾)為起點(diǎn)時(shí),索引是從 -1 開(kāi)始計(jì)數(shù)的
x = 'abcdefg'
# 獲取索引為3的字符
print(x[3])  # out: d
# 從右往左獲取索引為6的字符
print(x[-6])  # out: b


2. 2 獲取多個(gè)字符(字符串截去/字符串切片)

語(yǔ)法格式:str_name[start : end : step]

  • start:表示要截取的第一個(gè)字符所在的索引(包含該字符)。如果不指定,默認(rèn)為 0,即字符串的開(kāi)頭截取;
  • end:表示要截取的最后一個(gè)字符所在的索引(不包含該字符)。如果不指定,默認(rèn)為字符串的長(zhǎng)度;
  • step:表示切片的步長(zhǎng),如果省略,則默認(rèn)為1,當(dāng)省略該值時(shí),最后一個(gè)冒號(hào)也可以省略。
str = "hello world!"
# 截取第2個(gè)字符
str[1]  # out: 'e'

# 從第3個(gè)字符開(kāi)始截取
str[2:]  # out: 'llo world!'

# 到第4個(gè)字符結(jié)束
str[:4]  # out: 'hell'

# 截取1~5的字符
str[1:5]  # out: 'ello'

# 截取最后一個(gè)字符
str[-1]  # out: '!'

# 從第2個(gè)字符開(kāi)始~倒數(shù)第二個(gè)結(jié)束
str[2:-2]  # out: 'llo worl'


3. 分割、合并及替換字符串方法

3. 1 split()方法:分割字符串(返回一個(gè)列表)

語(yǔ)法格式:str.split(sep, maxsplit)

sep:用于指定分隔符,可以包含多個(gè)字符。此參數(shù)默認(rèn)為 None,表示所有空字符,包括空格(默認(rèn))、換行符“\n”、制表符“\t”等。當(dāng)字符串中有連續(xù)的空格或其他空字符時(shí),都會(huì)被視為一個(gè)分隔符對(duì)字符串進(jìn)行分割。

maxsplit:可選參數(shù),用于指定分割的次數(shù),最后列表中子串的個(gè)數(shù)最多為maxsplit+1。如果不指定或者指定為 -1,則表示分割次數(shù)沒(méi)有限制。

如果不指定 sep 參數(shù),那么也不能指定 maxsplit 參數(shù)。

str = "i am a good boy!"
str.split()  # 采用默認(rèn)分割符進(jìn)行分割
# out: ['i', 'am', 'a', 'good', 'boy!']

str.split(" ")  # 采用空格進(jìn)行分割
# out: ['i', 'am', 'a', 'good', 'boy!']

str.split(" ", 3)  # 采用空格進(jìn)行分割,并且只分割前3個(gè)
# out: ['i', 'am', 'a', 'good boy!']


3. 2 join()方法:合并字符串

語(yǔ)法格式:new_str = str.join(iterable)

iterable:做合并操作的源字符串?dāng)?shù)據(jù),允許以列表、元組等形式提供

# 將列表中的字符串合并成一個(gè)字符串。

list = ['console', 'log(dir)']  
'.'.join(list)  # out: console.log(dir)

  
# 將元組中的字符串合并成一個(gè)字符串。

dir = ('', 'usr', 'bin', 'env')  
type(dir)  # out: <class 'tuple'> 
'/'.join(dir)  # out: /usr/bin/env


3. 3 replace()方法:替換字符串

語(yǔ)法格式:new_str = str.replace(old, new[, max])

old -- 將被替換的子字符串。

new -- 新字符串,用于替換old子字符串。

max -- 可選字符串, 替換不超過(guò) max 次

str = 'hello world'
str.replace('world', 'python')  # out: 'hello python'

str1 = 'hello-world'
str1.replace('-', '')  # out: 'helloworld'
str1.replace('-', ' ')  # out: 'hello world'


4. 檢索字符串方法

str:表示原字符串;

sub:表示要檢索的字符串;

start:指定檢索的起始位置,也就是從什么位置開(kāi)始檢測(cè)。如果不指定,默認(rèn)從頭開(kāi)始檢索;

end:指定檢索的終止位置,如果不指定,則表示一直檢索到結(jié)尾。

注意:范圍都是左閉右開(kāi)

4. 1 count()方法

語(yǔ)法格式:str.count(sub[,start[,end]])

作用:用于檢索指定字符串在另一個(gè)字符串中出現(xiàn)的次數(shù),如果檢索的字符串不存在則返回0,否則返回出現(xiàn)的次數(shù)。

str = "abcdefga"  
str.count('a')  # out: 2

str = "abcadebfgc"  
str.count('b', 1)  # out: 2
str.count('b', 2)  # out: 1


str = "abcadebfgc"  
str.count('a', 0, -3)  # out: 2
str.count('c', 3, -4)  # out: 0


4. 2 find()方法

語(yǔ)法格式:str.find(sub[,start[,end]])

作用:檢索是否包含指定的字符串,如果檢索的字符串不存在則返回-1,否則返回首次出現(xiàn)該字符串時(shí)的索引。

str = "abcdefga"  
str.find('a')  # out: 0

str = "abcadebfgc"  
str.find('b', 1)  # out: 1
str.find('b', 2)  # out: 6

str = "abcadebfgc"  
str.find('ab', 0, -3)  # out: 0
str.find('c', 3, -4)  # out: -1


4. 3 index()方法

語(yǔ)法格式:str.index(sub[,start[,end]])

作用:和find方法類似,也用于檢索是否包含指定的字符串,使用index方法,當(dāng)指定的字符串不存在時(shí)會(huì)拋異常。

str = "hello world!"
str.index('w')  # out: 6

'''
index()和find()的區(qū)別:
    index(): 指定的字符串不存在時(shí)會(huì)拋異常
    find(): 檢索的字符串不存在則返回-1
'''

str.index('m')  # 報(bào)錯(cuò)
str.find('m')  # -1


4. 4 startswith()方法

語(yǔ)法格式:str.startswith(prefix[, start[, end]])

作用:檢索字符串是否以指定的字符串開(kāi)頭,如果是則返回true,否則返回false。

str = "hello world!"
str.startswith('hello')  # out: True
str.startswith('hi')  # out: False


4. 5 endswith()方法

語(yǔ)法格式:str.endswith(prefix[, start[, end]])

作用:檢索字符串是否以指定的字符串結(jié)尾,如果是則返回true,否則返回false。

str = "hello world!"
str.endswith('world!')  # out: True
str.endswith('ha')  # out: False


5.格式化字符串

語(yǔ)法格式:str.format(args)

str : 指定字符串的顯示樣式

args : 指定要進(jìn)行格式轉(zhuǎn)換的項(xiàng),如果有多項(xiàng),之間有逗號(hào)進(jìn)行分割。

學(xué)習(xí) format() 方法的難點(diǎn),在于搞清楚 str 顯示樣式的書(shū)寫(xiě)格式。在創(chuàng)建顯示樣式模板時(shí),需要使用{}來(lái)指定占位符,其完整的語(yǔ)法格式為:

{ [index][ : [ [fill] align] [sign] [#] [width] [.precision] [type] ] }

注意,格式中用 [ ] 括起來(lái)的參數(shù)都是可選參數(shù),即可以使用,也可以不使用。各個(gè)參數(shù)的含義如下:

  • index:指定:后邊設(shè)置的格式要作用到 args 中第幾個(gè)數(shù)據(jù),數(shù)據(jù)的索引值從 0 開(kāi)始。如果省略此選項(xiàng),則會(huì)根據(jù) args 中數(shù)據(jù)的先后順序自動(dòng)分配。

  • fill:指定空白處填充的字符。注意,當(dāng)填充字符為逗號(hào)(,)且作用于整數(shù)或浮點(diǎn)數(shù)時(shí),該整數(shù)(或浮點(diǎn)數(shù))會(huì)以逗號(hào)分隔的形式輸出,例如(1000000會(huì)輸出 1,000,000)。

  • align:指定數(shù)據(jù)的對(duì)齊方式,具體的對(duì)齊方式如表 1 所示。

表 1 align 參數(shù)及含義

align 含義
< 數(shù)據(jù)左對(duì)齊。
> 數(shù)據(jù)右對(duì)齊。
= 數(shù)據(jù)右對(duì)齊,同時(shí)將符號(hào)放置在填充內(nèi)容的最左側(cè),該選項(xiàng)只對(duì)數(shù)字類型有效。
^ 數(shù)據(jù)居中,此選項(xiàng)需和 width 參數(shù)一起使用。


  • sign:指定有無(wú)符號(hào)數(shù),此參數(shù)的值以及對(duì)應(yīng)的含義如表 2 所示。

表 2 sign 參數(shù)以含義

sign參數(shù) 含義
+ 正數(shù)前加正號(hào),負(fù)數(shù)前加負(fù)號(hào)。
- 正數(shù)前不加正號(hào),負(fù)數(shù)前加負(fù)號(hào)。
空格 正數(shù)前加空格,負(fù)數(shù)前加負(fù)號(hào)。
# 對(duì)于二進(jìn)制數(shù)、八進(jìn)制數(shù)和十六進(jìn)制數(shù),使用此參數(shù),各進(jìn)制數(shù)前會(huì)分別顯示 0b、0o、0x前綴;反之則不顯示前綴。
  • width:指定輸出數(shù)據(jù)時(shí)所占的寬度。
  • .precision:指定保留的小數(shù)位數(shù)。

  • type:指定輸出數(shù)據(jù)的具體類型,如表 3 所示。

表 3 type 占位符類型及含義

type類型值 含義
s 對(duì)字符串類型格式化。
d 十進(jìn)制整數(shù)。
c 將十進(jìn)制整數(shù)自動(dòng)轉(zhuǎn)換成對(duì)應(yīng)的 Unicode 字符。
e 或者 E 轉(zhuǎn)換成科學(xué)計(jì)數(shù)法后,再格式化輸出。
g 或 G 自動(dòng)在 e 和 f(或 E 和 F)中切換。
b 將十進(jìn)制數(shù)自動(dòng)轉(zhuǎn)換成二進(jìn)制表示,再格式化輸出。
o 將十進(jìn)制數(shù)自動(dòng)轉(zhuǎn)換成八進(jìn)制表示,再格式化輸出。
x 或者 X 將十進(jìn)制數(shù)自動(dòng)轉(zhuǎn)換成十六進(jìn)制表示,再格式化輸出。
f 或者 F 轉(zhuǎn)換為浮點(diǎn)數(shù)(默認(rèn)小數(shù)點(diǎn)后保留 6 位),再格式化輸出。
% 顯示百分比(默認(rèn)顯示小數(shù)點(diǎn)后 6 位)。

案例:

在實(shí)際開(kāi)發(fā)中,數(shù)值類型有多種顯示需求,比如貨幣形式、百分比形式等,使用 format() 方法可以將數(shù)值格式化為不同的形式。

# 以貨幣形式顯示
print("貨幣形式:{:,d}".format(1000000))
# out: 貨幣形式:1,000,000

# 科學(xué)計(jì)數(shù)法表示
print("科學(xué)計(jì)數(shù)法:{:E}".format(1200.12))
# out: 科學(xué)計(jì)數(shù)法:1.200120E+03

# 以十六進(jìn)制表示
print("100的十六進(jìn)制:{:#x}".format(100))
# out: 100的十六進(jìn)制:0x64

# 輸出百分比形式
print("0.01的百分比表示:{:.0%}".format(0.01))
# out: 0.01的百分比表示:1%


6.去除字符串中的空格以及特殊字符

開(kāi)發(fā)中,我們會(huì)遇到這樣的需求,字符串前后(左右側(cè))不允許出現(xiàn)空格和特殊字符或者將用戶輸入的字符串中誤輸入的空格去除掉。這時(shí)我們就需要用到strip函數(shù)。

6. 1 strip()方法

語(yǔ)法格式 : str.strip([chars])

作用:去除字符串前后(左右側(cè))的空格或特殊字符

str1  = " hello world! "
str1.strip()  # out: 'hello world!'

str2 = "#hello world#@#"
str2.strip('#')
# out: 'hello world#@'

str3 = "@hello world!@."
str3.strip('@.')  # out: 'hello world!'


6.2 lstrip()方法

語(yǔ)法格式 : str.lstrip([chars])

作用:去除字符串前面(左側(cè))的空格或特殊字符

str1  = " hello world! "
str1.lstrip()  # out: 'hello world! '

str2 = "#hello world#@#"
str2.lstrip('#')
# out: 'hello world#@#'

str3 = "@.hello world!@."
str3.lstrip('@.')  # out: 'hello world!@.'


6. 3 rstrip()方法

語(yǔ)法格式 : str.rstrip([chars])

作用:去除字符串后面(右側(cè))的空格或特殊字符

str1  = " hello world! "
str1.rstrip()  # out: ' hello world!'

str2 = "#hello world#@#"
str2.rstrip('#')
# out: '#hello world#@'

str3 = "@.hello world!@."
str3.rstrip('@.')  # out: '@.hello world!'


7.字符串的大小寫(xiě)轉(zhuǎn)換

7.1 str.lower()

作用:將字符串中的大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母

str = "Hello World!"
str.lower()  # out: 'hello world!'


7.2 str.upper()

作用:將字符串中的小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母

str = "Hello World!"
str.upper()  # out: 'HELLO WORLD!'


7.3 str.capitalize()

作用:將字符串中的首字母變成大寫(xiě)

str = "Hello World!"
str.capitalize()  # out: 'Hello world!'


7.4 str.title()

作用:將字符串中的每個(gè)單詞的首字母變成大寫(xiě)

str="hello world!"
str.title()  # out: 'Hello World!'


7.5 str.swapcase()

作用:將字符串中的字母大小寫(xiě)互換(即小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母,大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母)

str = "Hello World!"
str.swapcase()  # out: 'hELLO wORLD!'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容