1. 程式人生 > 實用技巧 >python 學習(八)- 深入學習字串

python 學習(八)- 深入學習字串

一、字串拼接

字串拼接,其實就是就是將多個字串連在一起得到一個新的字串:

1)直接將兩個字串緊挨著寫在一起:

str = "hello""world"
# print helloworld
print(str)

2)如果使用到了變數,可以使用 + 進行拼接:

a = "isKylin"
# print hello,isKylin
print("hello," + a)

二、擷取字串

前面有說,字串是序列的一種,因此可以通過索引的方式將字串擷取成單個或者多個字元。

2.1 獲取單個字元

1)直接使用 [ ] 即可:

a = "hello world"
# print l
print(a[3])

2.2 獲取多個字元

1)使用 [ ] 除了可獲取單個字元外,還可以指定一個範圍來獲取多個字元,也就是一個子串或者片段:

a = "hello world"
# print hlow
print(a[0:8:2])

三、字串大小轉換

為了方便對字串中的字母進行大小寫轉換,python 提供了 3 種方法,分別是 title()、lower() 和 upper()。

3.1 title() 方法

用於將字串中每個單詞的首字母轉為大寫,其他字母全部轉為小寫,轉換完成後,此方法會返回轉換得到的字串。如果字串中沒有需要被轉換的字元,此方法會將字串原封不動地返回。

a = "hello world"
# print Hello World
print(a.title())

3.2 lower() 方法

用於將字串中的所有大寫字母轉換為小寫字母,轉換完成後,該方法會返回新得到的字串,如果字串中原本就都是小寫字母,則該方法會返回原字串。

a = "hello world"
# print hello world
print(a.lower())

3.3 upper() 方法

用於將字串中的所有小寫字母轉換為大寫字母,和以上兩種方法的返回方式相同,即如果轉換成功,則返回新字串;反之,則返回原字串。

a = "hello world"
# print HELLO WORLD
print(a.upper())

四、去除字串空格

使用者輸入資料時,很有可能會無意中輸入多餘的空格,或者在一些場景中,字串前後不允許出現空格和特殊字元,此時就需要去除字串中的空格和特殊字元。

注意:這裡的特殊字元,指的是製表符(\t)、回車符(\r)、換行符(\n)等。

python 中字串變數提供了 3 種方法來刪除字串中多餘的空格和特殊字元,它們分別是:

1)strip():刪除字串前後(左右兩側)的空格或特殊字元。

2)lstrip():刪除字串前面(左邊)的空格或特殊字元。

3)rstrip():刪除字串後面(右邊)的空格或特殊字元。

注意,python 的 str 是不可變的(不可變指,字串一旦形成,它所包含的字元序列就不能發生任何改變),因此這三個方法只是返回字串前面或後面空白被刪除之後的副本,並不會改變字串本身。

4.1 strip() 方法

用於刪除字串左右兩個的空格和特殊字元:

str = "abc_123_abc"
new_str1 = str.strip('abc')
# print _123_
print(new_str1)

4.2 lstrip() 方法

str = "abc_123_abc"
new_str2 = str.lstrip('abc')
# print _123_abc
print(new_str2)

4.3 rstrip()方法

str = "abc_123_abc"
new_str3 = str.rstrip('abc')
# print abc_123_
print(new_str3)

五、字串常用方法

5.1 len()

要想知道一個字串有多少個字元(獲得字串長度),或者一個字串佔用多少個位元組,可以使用 len 函式。

str = "abc_123_abc"
# print 11
print(len(str))

除了獲取字串的長度外,還有獲取字串的位元組數,在 python 中,不同的字元所佔的位元組數不同,數字、英文字母、小數點、下劃線以及空格,各佔一個位元組,而一個漢字可能佔 2~4 個位元組,具體佔多少個,取決於採用的編碼方式,例如,漢字在 GBK/GB2312 編碼中佔用 2 個位元組,而在 UTF-8 編碼中一般佔用 3 個位元組。

以 UTF-8 編碼為例,字串“人生苦短,我用 Python”所佔用的位元組數如下所示:

1)UTF-8:

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

漢字加中文標點符號共 7 個,佔 21 個位元組,而英文字母和英文的標點符號佔 6 個位元組,一共佔用 27 個位元組。

2)GBK:

str1 = "人生苦短,我用Python"
# print 20
print(len(str1.encode('gbk')))

漢字加中文標點符號共 7 個,佔 14 個位元組,而英文字母和英文的標點符號佔 6 個位元組,一共佔用 20 個位元組。

5.2 split()

split() 可以將一個字串按照指定的分隔符切分成多個子串,這些子串會被儲存到列表中(不包含分隔符):

str1 = "人生苦短,我用Python"
lis = str1.split()
# print ['人生苦短,我用Python']
print(lis)
lis2 = str1.split(',')
# print ['人生苦短', '我用Python']
print(lis2)

5.3 join()

join() 是 split() 方法的逆方法,用來將列表(或元組)中包含的多個字串連線成一個字串:

lis = ['A', 'B', 'C']
str = ''.join(lis)
# print ABC
print(str)

5.4 count()

count 用於檢索指定字串在字串中出現的次數,如果檢索的字串不存在,則返回 0,否則返回出現的次數。

str = "hello world"
# print 3
print(str.count('l'))
# print 1,從 index 6開始檢索
print(str.count('l', 6, 12))

5.5 find()

find() 方法用於檢索字串中是否包含目標字串,如果包含,則返回第一次出現該字串的索引;反之,則返回 -1。

find() 方法的語法格式如下:

str.find(sub[,start[,end]])

此格式中各引數的含義如下:

  1. str:表示原字串;
  2. sub:表示要檢索的目標字串;
  3. start:表示開始檢索的起始位置。如果不指定,則預設從頭開始檢索;
  4. end:表示結束檢索的結束位置。如果不指定,則預設一直檢索到結尾。

【例 1】用 find() 方法檢索 “c.biancheng.net” 中首次出現 “.” 的位置索引。

>>> str = "c.biancheng.net"
>>> str.find('.')
1

【例 2】手動指定起始索引的位置。

>>> str = "c.biancheng.net"
>>> str.find('.',2)
11

【例 3】手動指定起始索引和結束索引的位置。

>>> str = "c.biancheng.net"
>>> str.find('.',2,-4)
-1

位於索引(2,-4)之間的字串為“biancheng”,由於其不包含“.”,因此 find() 方法的返回值為 -1。

注意,Python 還提供了 rfind() 方法,與 find() 方法最大的不同在於,rfind() 是從字串右邊開始檢索。例如:

>>> str = "c.biancheng.net"
>>> str.rfind('.')
11

5.6 index()

index() 可用於檢索是否包含指定字串,與 find() 不同在於,當指定字串不存在時,index() 會丟擲異常。

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

此格式中各引數的含義分別是:

1)str:表示原字串。

2)sub:表示要檢索的子字串。

3)start:表示檢索開始的起始位置,如果不指定,預設從頭開始檢索。

4)end:表示檢索的結束位置,如果不指定,預設一直檢索到結尾。

str = "hello world"
# print 1
print(str.index("e"))
# ValueError: substring not found
print(str.index("t"))

5.7 ljust()、rjust()、center()

str 提供了 3 種用來文字對齊的方法,分別是 ljust()、rjust() 和 center() 方法:

1)ljust():向指定字串的右側填充指定字元,從而達到左對齊文字的目的。

2)rjust():向字串的左側填充指定字元,從而達到右對齊文字的目的。

3)center():讓文字居中。

text = 'Hello World'
# print Hello World===================
print(text.ljust(30, '='))
# print ===================Hello World
print(text.rjust(30, "="))
# print =========Hello World==========
print(text.center(30, "="))

5.8 startswith()、endswith()

1)startswith() :用於檢索字串是否以指定字串開頭,如果是返回 True;反之返回 False。

text = 'Hello World'
# print True
print(text.startswith('H'))

2)endswith() :用於檢索字串是否以指定字串結尾,如果是則返回 True;反之則返回 False。

text = 'Hello World'
# print False
print(text.endswith('H'))

5.9 format()

python2.6 開始,新增了一種格式化字串的函式 str.formate 它增強了字串格式化的功能,基本語法是通過 {} 和 : 代替以前的 %:

# print hello world
print("{} {}".format("hello", "world"))

# print world hello world
print("{1} {0} {1}".format("hello", "world"))

# print 網站名:百度搜索, 地址:www.baidu.com
print("網站名:{name}, 地址:{url}".format(name="百度搜索", url="www.baidu.com"))

dic = {"name": "百度搜索", "url": "www.baidu.com"}
# print 網站名:百度搜索, 地址:www.baidu.com
print("網站名:{name}, 地址:{url}".format(**dic))

lis = ['百度搜索', 'www.baidu.com']
# print 網站名:百度搜索, 地址:www.baidu.com
print("網站名:{0[0]}, 地址:{0[1]}".format(lis))

5.10 dir()、help()

python 中 dir() 函式用來列出某個類或者某個模組中的全部內容,包括變數、方法、函式和類等:

print(dir(str))

python 中 help() 函式用來檢視某個函式或者模組的幫助文件:

print(help())