1.字符串的表示方式:用引號/雙引號將任意字符串引起來
例如:a = 'abcd5sd6+f5as.x/dsf'
b = ''abcd5sd6+f5as.x/dsf''
要知道,字符串str是一種一旦創建了就不能修改的類型,下面的增刪改查的改,其實是一種提出來修改以後再重新賦值回去的操作
2.字符串的增刪改查
a.增加
●可以通過直接賦值的方式增加一個字符串b.刪除
●可以通過 del + 要刪除的字符串 進行刪除 例如: del a●將字符串按指定順序(從右往左,從左往右)把指定字符給去除掉(指定的字符,如果沒有輸入則默認爲空格)
.lstrip() | 去除字符串左邊的指定字符 |
.rstrip() | 去除字符串左邊的指定字符 |
.strip() | 頭和尾都去除 |
a = '123456' print(a.strip('615') print(a.lstrip('1')) print(a.rstrip('6'))另外值得注意的是, 這個方法的運算邏輯是:把你指定要去除的那個字符串(即上面例子中的615)拆開,一個元素一個元素的去和原字符串(即123456)做匹配。
比如把615分爲6、1、5三個元素,分別和123456進行兩頭匹配,
左邊:'1'屬於6、1、5中的其中一個,刪掉;接着是2,不屬於6、1、5中的任何一個,所以左邊的停止
右邊:'6'屬於6、1、5中的其中一個,刪掉;接着是5,同樣屬於6、1、5中的其中一個,刪掉;接下來是4,不屬於它們3箇中的任何一個,所以停止,結果就是'234'
c.修改
(這裏爲什麼說了不可修改還能寫着修改呢,因爲這裏所謂的'修改'只是將字符串提出來,將新的字符串(修改後的)再賦值回去的操作)
.format() | 【將字符串中的佔位符用指定的內容替換】 |
.format_map() | 【將字符串中的佔位符用指定的內容替換】 |
a = 'my name is {name} , age is {age}.'
print(a.format(name = 'capture',age = 999))
b = 'my name is {0} , age is {1}.'
print(b.format('capture',999))
c = 'my name is {name} , age is {age}.'
print(c.format_map({'name':'capture','age':999}))
%s | 可以接收所有類型的元素,返回字符串 |
%d | 只能接收數字 |
%f | 接收的是小數 |
【這裏的's'可以認爲是'string'的縮寫,同樣是和上面一樣,這裏的%s和%d可以認爲是一個佔位符】
例如:
a = 'my name is %s, my age is %s.' %('capture','999') #%s還可以用%.2s、%.3s代替,意爲截取字符串的前2、3位
b = '這裏有一個浮點數%.2f' %(92.15674891318913) #在這裏,%.2f就是保留小數點後兩位小數(四捨五入),當輸入%f時就是不做省略
%'作字符串拼接因爲是一個稍稍複雜的體系,會專門做一章出來總結
.expandtabs() | 將字符串中的製表符全部用空格代替,使得字符串的長度以指定長度擴展(製表符空格數不指定的話默認是8 |
例如:
a = 'name\t age\t sex\nxiaoming\t 18\t nan\n' b = 'name\t age\t sex\nxiaoming\t 18\t nan\nxiaoming\t 18\t nan\nxiaoming\t 18\t nan\nxiaoming\t 18\t nan\n' print(a.expandtabs(30)) print(b.expandtabs(30))
●字符串大小寫互換
.capitalize() | 首字母大寫 |
.casefold() | 整個字符串變小寫【casefold比lower更全面】 |
.lower() | 大寫變小寫 |
.upper() | 小寫變大寫 |
.swapcase() | 大小寫互換 |
●字符串映射和替換
.maketrans() | maketrans()和translate()是配合使用的 |
.translate() | |
.replace() | (原字符串裏要替換的字符,新的字符,匹配的最大次數) |
例如:
a = '一二三四五'
b = '12345'
c = str.maketrans(a,b) #建立映射關係
d = b.replace('123','哈哈哈',3)
x = '15645641845642873一五三六七九二'
y = x.translate(c)
print(y)
print(d)
d.查詢
●首先因爲字符串是可迭代對象,所以我們可以藉助for循環拆解輸出,其次我們還可以通過索引和切片的形式將其輸出
.count() (指定內容,開始位置,結束位置) | 計算字符串中指定內容出現的次數 |
.find() (指定內容,開始位置,結束位置) | 在字符串中尋找指定內容並輸出其在字符串中第一次出現的位置,如果沒有找到即輸出-1 |
.index() | 和find()一樣的一個方法,區別在於找不到會報錯 |
a = 'abcdefgabcdefg'
print(a.count('bcd',4,10))
print(a.find('bcd',1,4))
#這裏字符串的計數,用的是"閉區間,開區間"的方式(即'(0,1]'的方式),在計算結束位置的時候應該+1●字符串的解碼與編碼
在此之前,先說一下encode()和decode()做的事情,在我們編輯一個文件的時候,系統行會把整個文件提到內存中,等到我們修改完畢之後再將整個修改過的文件覆蓋到硬盤裏去,在覆蓋到硬盤去之前,系統會將內存中的文件,按指定的編碼方式(你可以認爲是特定的順序)把文件轉換成二進制,這樣硬盤才能接收。
這裏encode()做的就是模擬把字符串轉換成特定編碼形式的二進制的事情,而decode()就是將二進制字符串解碼成我們能閱讀的文字。
.encode() (要轉換的編碼,轉換出錯的處理方式) | 將字符串轉換爲指定的編碼,返回bytes對象 |
.decode() (與encode用法類似) | 將指定的bytes對象轉換爲對應的字符串 |
例如:
a = '有錢真的是可以爲所欲爲的'
b = a.encode('utf-8')
print(b)
print(b.decode('utf-8'))
3.字符串str的其他方法
a.設置一個寬度片段並將字符串居中、左、右表示(寬度,填充物)
.center() | 居中 |
.ljust() | 居左 |
.rjust() | 居右 |
a = 'abcd'
print(a.center(40,'將'))
b.判斷字符串是否以某個指定內容作爲開頭或者作爲結尾(指定內容,開始位置,結束位置)【這裏返回的是bool值】
.endswith() | 結尾 |
.startswith() | 開頭 |
a = 'abcdefgh'
print(a.endswith('efg',2,7))
#和上面的count一樣,這兩個方法計算字符串的時候也用的"開區間,閉區間"的方式c.一大堆判斷的方法【返回bool值】
.isalnum() | 是否只包含數字以及字母 |
.isalpha() | 是否爲字母(包括漢字) |
.isdecimal() | 是否爲十進制數 |
.isdigit() | 是否爲數字【比.isdecimal()範圍大】 |
.isnumeric() | 是否爲數字值【比.isdigit()範圍大】 |
.isidentifier() | 是否爲標識符(例如'_123'和'def'就是返回的true,只要符合變量名的要求就ok) |
.isprintable() | 是否全部都能顯示(例如字符串中的\n\t之類的就是不能顯示的,有這些會輸出false) |
.isspace() | 是否全是空格【\t也會輸出true】 |
.istitle | 是否爲標題(首字母全是大寫的英文語句就會被認爲是標題) |
.isupper | 是否爲大寫字母 |
.islower() | 是否爲小寫字母 |
d.將字符串中的每一個元素拆開,用指定的內容將其連接成新的字符串(被拆開的字符串)
.join()
例:
a = '我就是餓死,死外邊,從這裏跳下去,也不會學python\n真香'
b = '_'
print(b.join(a))
c = '我就是餓死,死外邊,從這裏跳下去,也不會學python\n真香'
print('_'.join(c))
#上面是單個字符串,這回是元組
d = ('我就是餓死','死外邊','從這裏跳下去','也不會學python','真香')
print('_'.join(d))
e.將字符串進行分割
.partition() | |
.rpartition() | |
.split() | (指定要刪除的字符串,匹配次數) |
.rsplit() | |
.splitlines() | (ture和false #是否保留換行符)【.split()方法的變種,通過換行符來進行分割】 |
這裏兩個都是進行字符串分割,-r前綴代表從右往左的分割,split()方法分割字符串以後會把指定的那個字符串丟掉,而partition()方法不會且此方法指定次數只有一次
例如:
a = 'hedwsjfodiaspo'
print(a.partition('d'))
print(a.split('d',2))