4.3 字串(str、bytes)
4.3.1 字串前置知識
4.3.1.1 字串的概念
字串由一系列字符組成,字符(Character)是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等,字串是編程語言中表示文本的資料型別,
字串就是由一個個元素(字符)組成的,像這種由一個個元素按照順序組成的資料,在Python語言里面,把這種特性的資料稱之為 sequence,翻譯成中文就是序列,關于序列,我們將在后續內容中詳細介紹,
4.3.1.2 字符集
字符集是多個字符的集合,字符集種類較多,每個字符集包含的字符個數不同,常見字符集有:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等,
字符集簡單來說,就是一張表格,是字符和id的對應表,
4.3.1.3 字符編碼、解碼
因為計算機只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理,最早的計算機在設計時采用8個位元(bit,也成為位)作為一個位元組(byte),所以,一個位元組能表示的最大的整數就是255(二進制11111111=十進制255),如果要表示更大的整數,就必須用更多的位元組,比如兩個位元組可以表示的最大整數是65535,4個位元組可以表示的最大整數是4294967295,
計算機中儲存的資訊都是用二進制數表示的,而我們在螢屏上看到的英文、漢字等字符是二進制數轉換之后的結果,
通俗的說,按照某種規則將字符存盤在計算機中,如a用什么表示,稱為編碼;反之,將存盤在計算機中的二進制數決議成字符顯示出來,稱為解碼,如同密碼學中的加密和解密,
在解碼程序中,如果使用了錯誤的解碼規則,則會導致目標字符被決議成其它字符或者亂碼,
4.3.1.3.1 編碼發展史
美國人發明了計算機,用八位0和1的組合,一一對應英文中的字符,整出了一個表格,ASCII表,也就是大名鼎鼎的ASCII字符集,
ASCII字符集主要包括控制字符(回車鍵、退格、換行鍵等);可顯示字符(英文大小寫字符、阿拉伯數字和西文符號),
計算機傳入中國,中國地大物博,繁體字和簡體字多,8位位元組最多表示256個字符,滿足不了人們的日常作業需要,于是對ASCII擴展,新字符集叫GB2312,后來發現GB2312還不夠用,擴充之后形成GB18030,
每個國家都像中國一樣,把自己的語言編碼,于是出現了各種各樣的編碼,如果你不安裝相應的編碼,就無法正確解碼查看到正確的內容,
由于各個國家的編碼無法進行國際交流,一個國際組織一起創造了一種編碼 UNICODE(Universal Multiple-Octet Coded Character Set)規定所有字符用兩個位元組表示,就是固定的,所有的字符就兩個位元組,計算機容易識別,
UNICODE雖然解決了各自為戰的問題,但是美國人不愿意了,因為美國原來的ASCII只需要一個位元組就可以了,UNICODE編碼卻讓他們的語言多了一個位元組,白白浪費一個位元組的存盤空間,經過協商,出現了一種新的轉換格式,被稱為通用轉換格式,也就是UTF(unicode transformation format),常見的有UTF-8、UTF-16,UTF-8規定,美國字符一個位元組,歐洲兩個字符,東南亞三個字符,
4.3.1.3.2 ASCII編碼
ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,它主要用于顯示現代英語,而其擴展版本EASCII則可以顯示其他西歐語言,它是現今最通用的單位元組編碼系統,
ASCII編碼將ASCII字符集轉換為計算機系統可以存盤的數字的編碼規則,使用7位(bits)表示一個字符,共128字符;但是7位編碼的字符集只能支持128個字符,為了表示更多的歐洲常用字符對ASCII進行了擴展,ASCII擴展字符集使用8位(bits)表示一個字符,共256字符,
4.3.1.3.3 GBXXXX字符集和編碼
GB2312標準共收錄6763個漢字,GB2312對任意字符都采用雙位元組表示,
GBK共收入21886個漢字和圖形符號,GBK對任意字符都采用雙位元組表示,
GB18030共收錄漢字70244個,GB18030編碼是一二四位元組變長編碼,其單位元組,與 ASCII 編碼兼容,
注:GBK兼容GB2312,GB18030兼容GBK,
4.3.1.3.4 Unicode字符集和編碼
Unicode是國際組織制定的可以容納世界上所有文字和符號的字符編碼方案,記錄著世界上所有字符對應的一個數字,
Unicode只是一個字符集,并不是一個編碼方式,有2種,一種是UCS-2字符集,利用2個位元組表示字符,一共可以表示65535個字符,另一種是UCS-4字符集,利用4個位元組表示字符,一共可以表示近43億個字符,每一個碼位可以代表一個字符,可以不通過編碼就直接顯示出來,
4.3.1.3.5 UTF-8編碼
UTF-8 是目前互聯網上使用最廣泛的一種 Unicode 編碼方式,它的最大特點就是可變長,它可以使用 1 - 4 個位元組表示一個字符,根據字符的不同變換長度,
UTF-8以位元組為單位對Unicode進行編碼,UTF-8的特點是對不同范圍的字符使用不同長度的編碼,對于0x00—0x7F之間的字符,UTF-8編碼與 ASCII 編碼完全相同,
對于需要使用 N 個位元組來表示的字符(N > 1),第一個位元組的前 N 位都設為 1,第 N + 1 位設為0,剩余的 N - 1 個位元組的前兩位都設位 10,剩下的二進制位則使用這個字符的 Unicode 碼點來填充,
4.3.1.3.6 ANSI編碼
ANSI編碼就是當地系統默認編碼,在中國,ANSI編碼默認為GBK,
4.3.1.4 Python中的編碼、解碼
Python3的字串在Python內部的表示是unicode編碼,因此在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼,
encode的作用是將unicode編碼轉換成其他編碼的字串,如str.encode(gbk),表示將unicode編碼的字串str轉換成gbk編碼,
string = '離離原上草,一歲一枯榮'.encode('gbk')
print(type(string))
print(string)
<class 'bytes'>
b'\xc0\xeb\xc0\xeb\xd4\xad\xc9\xcf\xb2\xdd\xa3\xac\xd2\xbb\xcb\xea\xd2\xbb\xbf\xdd\xc8\xd9'
通過chardet.detect可以對編碼進行檢測
>>> print(chardet.detect(string))
{'encoding': 'GB2312', 'confidence': 0.7407407407407407, 'language': 'Chinese'}
decode的作用是將其他編碼的字串轉換成unicode編碼,如str.decode(gbk),表示將gbk編碼的字串str轉換成unicode編碼,
string = '離離原上草,一歲一枯榮'.encode('gbk')
print(string)
print(string.decode('gbk'))
b'\xc0\xeb\xc0\xeb\xd4\xad\xc9\xcf\xb2\xdd\xa3\xac\xd2\xbb\xcb\xea\xd2\xbb\xbf\xdd\xc8\xd9'
離離原上草,一歲一枯榮
總結:想要將其他的編碼轉換成UTF-8必須先將其解碼成unicode然后重新編碼成UTF-8,它是以unicode為轉換媒介的,如:s='中文' 如果是在utf8的檔案中,該字串就是utf8編碼,如果是在gb2312的檔案中,則其編碼為gb2312,這種情況下,要進行編碼轉換,都需要先用 decode方法將其轉換成unicode編碼,再使用encode方法將其轉換成其他編碼,
通常,在沒有指定特定的編碼方式時,都是使用系統默認編碼創建的代碼檔案,
PS:為了方便理解和記憶,可以粗略的將編碼理解為加密,解碼理解為解密,編碼(加密)之前的文本是能看懂的明文,但是編碼(加密)之后就成了看不懂的密文(bytes型別),不同的加密方式就對應不同的編碼方式,只有通過對應的解碼(解密)方式才能正確解密,
4.3.2 字串的創建
4.3.2.1 通過字串識別符號創建
在Python中可以使用單引號('')或雙引號("")來表示字串,多行字串可以使用三重引號 ''' 或 """ 來表示,
'hello,world'
"祝你好運~"
"""
多行內容:
離離原上草,一歲一枯榮,
野火燒不盡,春風吹又生,
遠芳侵古道,晴翠接荒城,
又送王孫去,萋萋滿別情,
"""
注意:
1、在Python中,沒有單個字符,只有字串,單獨的一個字符也是字串,
2、Python中單引號和雙引號單獨使用完全相同,
4.3.2.2 字串的拼接和重復
參見可迭代物件章節中的序列的拼接和重復
4.3.2.3 字符轉義
如果我們需要定義的字串中有引號,直接定義會報錯:
>>> string = 'Let's go'
Traceback (most recent call last):
File "C:\Program Files\Python3102\lib\code.py", line 63, in runsource
code = self.compile(source, filename, symbol)
File "C:\Program Files\Python3102\lib\codeop.py", line 185, in call
return _maybe_compile(self.compiler, source, filename, symbol)
File "C:\Program Files\Python3102\lib\codeop.py", line 102, in _maybe_compile
raise err1
File "C:\Program Files\Python3102\lib\codeop.py", line 91, in _maybe_compile
code1 = compiler(source + "\n", filename, symbol)
File "C:\Program Files\Python3102\lib\codeop.py", line 150, in call
codeob = compile(source, filename, symbol, self.flags, True)
File "", line 1
string = 'Let's go'
^
SyntaxError: unterminated string literal (detected at line 1)
這是因為定義字串時,引號要兩兩配對,而在上面的字串中出現了3個單引號,無法進行配對,這個時候我們可以用雙引號進行定義字串:
>>> string = "Let's go"
在定義字串時,單引號和雙引號都可以,字串中有單獨的雙引號也同理,
一般的,我們在用雙引號定義字串時,字串本身的內容中就不能包含雙引號,而在用單引號定義字串時,字串本身的內容中就不能包含單引號,
但是,如果需要定義的字串內容中既有單引號又有雙引號該怎么辦呢?有2種方法可以處理這種情況:
1、采用三引號定義,三單引號或雙引號都行
2、采用字符轉義
4.3.2.3.2 字符轉義
字符轉義就是用一個特定的符號對某個字符進行轉義,讓這個字符代表其它的意思,在Python中用\對符號進行轉義,常見轉義字符如下:
| 轉義字符 | 描述 | 顯示效果 |
|---|---|---|
| \ | 反斜杠符號 | \ |
| ' | 單引號 | ' |
| " | 雙引號 | " |
| \b | 退格 | |
| \n | 換行 | |
| \t | 制表符 |
如果使用轉義,則上面的示例可以用'Let's go'來表示,雖然單引號包裹的內容中含有單引號,但是也不會報錯,因為字串中的單引號用\進行轉義了,
4.3.2.4 字串前綴
在Python3中,字串的型別只有2種,分別是:str、bytes,在字串前面可以加上前綴,產生不同的效果,比較常用的前綴有:r、u、b,
r:表示之后的字串中的內容不進行轉義,保持原樣
u:表示之后的字串為Unicode,在Python3中默認所有的字串為此種型別,
b:表示之后的字串為bytes型別
windows系統絕對路徑會包含\符號,如果在Python中要表示windows系統的路徑經常會報錯,因為會將路徑中的\及后面的字符當成轉義符進行轉義,對于日常使用非常不方便,這個時候就可以用到r前綴:
>>> print('C:\new\name') # 這里的\n代表換行,與預期不符
C:\new
ame
>>> print(r'C:\new\name') # 字串中的內容原樣顯示
C:\some\name
這樣,上面的字串中的\n才不會當成換行符顯示,而是保持原樣,
4.3.3 字串的訪問
4.3.3.1 字串索引
參見可迭代物件章節中的序列的索引
4.3.3.2 字串切片
參見可迭代物件章節中的序列的切片
4.3.3.3 遍歷字串
參見可迭代物件章節中的可迭代物件的遍歷
4.3.3.4 成員資格檢查
參見可迭代物件章節中的成員資格檢查
4.3.4 字串的修改
Python 字串不能修改,是可哈希的,因此,為字串中某個索引位置賦值會報錯:
>>> string = 'Python'
>>> string[0] = 'J'
Traceback (most recent call last):
File "C:\Program Files\Python3102\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "", line 1, in
TypeError: 'str' object does not support item assignment
要生成不同的字串,應新建一個字串:
>>> string = 'Python'
>>> 'J' + string[1:]
>>> string[:2] + 'py'
'Jython'
'Pypy'
4.3.5 字串的洗掉
由于字串是可哈希的,因此無法洗掉字串中的某個元素(字符),要洗掉其中的某個元素(字符)也只能通過新建字串的方式完成,
>>> string = 'Python'
>>> str2 = string[:2] + string[3:]
>>> str2
'Pyhon'
4.3.6 字串格式化
如果對字串的輸出的格式有要求,需要用到字串的格式化,比如,在群發短信時,每次的名稱不一樣,但是內容是一樣的,這個時候就需要用到字串的格式化,
xx您好!這里是山東小紅花集團...
4.3.6.1 %格式化
Python可以通過使用%占位符的方式來格式化字串,例如:
>>> 'Hello, %s' % 'world'
>>> 'Hi, %s, you are %d years old.' % ('Yagami', 16)
'Hello, world'
'Hi, Yagami, you are 16 years old.'
stars = ("黎明", "華仔", "郭富城", "張學友")
print("四大天王:%s, %s, %s, %s" % stars)
四大天王:黎明, 華仔, 郭富城, 張學友
在字串內部,%s表示用字串替換,%d表示用整數替換,有幾個%?占位符,后面就跟幾個變數或者值,順序要對應好,如果只有一個%?,后面變數的括號可以省略,
%格式化中常見的占位符:
| 占位符 | 替換內容 |
|---|---|
| %d | 整數 |
| %f | 浮點數 |
| %s | 字串 |
| %x | 十六進制整數 |
其中,格式化整數和浮點數還可以指定是否補0和整數與小數的位數:
print('%9d-%09d' % (3, 1))
print('%.6f' % 3.1415926)
3-0000000013.141593
如果你不太確定應該用什么,%s永遠起作用,它會把任何資料型別轉換為字串:
>>> 'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'
關于自定義格式,將會在后面的自定義格式章節進行詳細介紹,
使用%轉義百分號
>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'
4.3.6.2 format
format是Python2.6開始新增的一種格式化字串的函式,它會用傳入的引數依次替換字串內的占位符{0}、{1}……
使用方法:通過format函式中的引數來代替字串中的{}內容,
指定位置
>>> "{} {}".format("hello", "world") # 不設定指定位置,按默認順序
>>> "{1} {0} {1}".format("hello", "world") # 設定指定位置
'hello world'
'world hello world'
設定引數
>>> "網站名:{name}, 地址:{url}".format(name="本", url="www.ben.com")
'網站名:本, 地址:www.ben.com'
通過字典設定引數
>>> site = {"name": "本", "url": "www.ben.com"}
>>> "網站名:{name}, 地址 {url}".format(**site)
'網站名:本, 地址:www.ben.com'
通過串列索引設定引數
>>> my_list = ['本', 'www.ben.com']
>>> "網站名:{0[0]}, 地址 {0[1]}".format(my_list) # "0" 是必須的
'網站名:本, 地址:www.ben.com'
使用{}轉義大括號
>>> "{} 對應的位置是 {{10}}".format("ben")
ben對應的位置是 {10}
你還可以指定要轉換的值是哪種型別,更準確地說,是要將其視為哪種型別,例如,你可能提供一個整數,但將其作為小數進行處理,為此可在格式說明(即冒號后面)使用字符f(表示定點數),
>>> "π is {:.2f}".format(3.1415926)
'π is 3.14'
關于自定義格式,將會在后面的自定義格式章節進行詳細介紹,
4.3.6.1 f-string
f-string,亦稱為格式化字串常量(formatted string literals),是Python3.6新引入的一種字串格式化方法,該方法源于PEP 498 – Literal String Interpolation,主要目的是使格式化字串的操作更加簡便,f-string在形式上是以 f 或 F 修飾符引領的字串(f'xxx' 或 F'xxx'),以大括號 {} 標明被替換的欄位;f-string在本質上并不是字串常量,而是一個在運行時運算求值的運算式,
f-string在功能方面不遜于傳統的%-formatting陳述句和str.format()函式,同時性能又優于二者,且使用起來也更加簡潔明了,因此對于Python3.6及以后的版本,推薦使用f-string進行字串格式化,
簡單使用
f-string用大括號 {} 表示被替換欄位,其中直接填入替換內容:
>>> name = 'Eric'
>>> f'Hello, my name is {name}'
'Hello, my name is Eric'
>>> number = 7
>>> f'My lucky number is {number}'
'My lucky number is 7'
>>> price = 19.99
>>> f'The price of this book is {price}'
'The price of this book is 19.99'
運算式求值與函式呼叫
f-string的大括號 {} 可以填入運算式或呼叫函式,Python會求出其結果并填入回傳的字串內:
>>> f'A total number of {24 * 8 + 4}'
'A total number of 196'
>>> f'Complex number {(2 + 2j) /(2 - 3j)}'
'Complex number(-0.15384615384615388+0.7692307692307692j)'
>>> name = 'ERIC'
>>> f'My name is {name.lower()}'
'My name is eric'
>>> import math
>>> f'The answer is {math.log(math.pi)}'
'The answer is 1.1447298858494002'
引號、大括號與反斜杠
f-string大括號內所用的引號不能和大括號外的引號定界符沖突,可根據情況靈活切換 ' 和 ":
>>> f'I am {"Eric"}'
'I am Eric'
>>> f'I am {'Eric'}'
File "<stdin>", line 1 f'I am {'Eric'}' ^SyntaxError: invalid syntax
若 ' 和 " 不足以滿足要求,還可以使用 ''' 和 """,
大括號外的引號還可以使用 \ 轉義,但大括號內不能使用 \ 轉義:
>>> f'''He'll say {"I'm Eric"}'''
"He'll say I'm Eric"
>>> f'''He'll say {"I'm Eric"}'''
File "<stdin>", line 1SyntaxError: f-string expression part cannot include a backslash
f-string大括號外如果需要顯示大括號,則應輸入連續兩個大括號 {{ 和 }}:
>>> f'5 {"{stars}"}'
>>> f'{{5}} {"stars"}'
'5 {stars}'
'{5} stars'
上面提到,f-string大括號內不能使用 \ 轉義,事實上不僅如此,f-string大括號內根本就不允許出現 \,如果確實需要 \,則應首先將包含 \ 的內容用一個變數表示,再在f-string大括號內填入變數名,
4.3.6.2 自定義格式
通過對上述3種格式化字串的方法的學習,我們可以大致的了解在格式化字串中用到的自定義格式,
這3種格式化字串的方法中都可以用到自定義格式,方法也大同小異,下面就詳細的來介紹下如何自定義格式,
主要包括:對齊、寬度、符號、補零、精度、進制等
4.3.6.2.1 對齊相關
< 左對齊(字串默認對齊方式),&格式化使用-
右對齊(數值默認對齊方式) ,
&格式化使用+
^ 居中,適用于f-string和format
var1 = 'python'
var2 = -3.1415
print(f'|{var1:>10}|')
print('|{:^10}|'.format(var2))
print('|%+10s|' % var1)
print('|%-10s|' % var2)
| python|
| -3.1415 |
| python|
|-3.1415 |
4.3.6.2.2 數字符號相關格式描述符
-
負數前加負號(-),正數前加正號(+)
-
負數前加負號(-),正數前不加任何符號(默認)
空格 負數前加負號(-),正數前加一個空格
注:僅適用于數值型別,
var1 = 3.14
var2 = -4.13
print(f'|{var1:+}|')
print('|{:-}|'.format(var2))
print('|{: }|'.format(var1))
print('|%+s|' % var1)
|+3.14|
|-4.13|
| 3.14|
|3.14|
4.3.6.2.3 寬度與精度相關格式描述符
width 整數 width 指定寬度
0width 整數 width 指定寬度,開頭的 0 指定高位用 0 補足寬度
width.precision 整數 width 指定寬度,整數 precision 指定顯示精度
注意:
1、0width 不可用于復數型別和非數值型別,width.precision 不可用于整數型別,
2、width.precision 用于不同格式型別的浮點數、復數時的含義也不同:用于 f、F、e、E 和 % 時 precision 指定的是小數點后的位數,用于 g 和 G 時 precision 指定的是有效數字位數(小數點前位數+小數點后位數),
3、width.precision 除浮點數、復數外還可用于字串,此時 precision 含義是只使用字串中前 precision 位字符,
var1 = 3.1415
print(f'|{var1:8}|')
print('|{:8.3}|'.format(var1))
print('|{:.4}|'.format(var1))
print('|%10.5s|' % var1)
| 3.1415|
| 3.14|
|3.142|
| 3.141|
4.3.6.2.4 千位分隔符相關格式描述符
, 使用,作為千位分隔符
_ 使用_作為千位分隔符
注意:
1、若不指定 , 或 ,則f-string不使用任何千位分隔符,此為默認設定,
2、僅適用于浮點數、復數與十進制整數:對于浮點數和復數,, 只分隔小數點前的數位,
3、 適用于浮點數、復數與二、八、十、十六進制整數:對于浮點數和復數,_ 只分隔小數點前的數位;對于二、八、十六進制整數,固定從低位到高位每隔四位插入一個 _(十進制整數是每隔三位插入一個 _),
var1 = 31415
print(f'|{var1:_}|')
print('|{:,}|'.format(var1))
print('|%,s|' % var1) # 不適用
|31_415|
|31,415|
Traceback (most recent call last):
File "E:\studypy\tmp.py", line 4, in
print('|%s|' % var1)
ValueError: unsupported format character '' (0x5f) at index 2
4.3.6.2.5 格式型別相關格式描述符
格式描述符 含義與作用 適用變數型別
s 普通字串格式 字串
b 二進制整數格式 整數
c 字符格式,按unicode編碼將整數轉換為對應字符 整數
d 十進制整數格式 整數
o 八進制整數格式 整數
x 十六進制整數格式(小寫字母) 整數
X 十六進制整數格式(大寫字母) 整數
e 科學計數格式,以 e 表示 ×10^ 浮點數、復數、整數(自動轉換為浮點數)
E 與 e 等價,但以 E 表示 ×10^ 浮點數、復數、整數(自動轉換為浮點數)
f 定點數格式,默認精度(precision)是6 浮點數、復數、整數(自動轉換為浮點數)
F 與 f 等價,但將 nan 和 inf 換成 NAN 和 INF 浮點數、復數、整數(自動轉換為浮點數)
g 通用格式,小數用 f,大數用 e 浮點數、復數、整數(自動轉換為浮點數)
G 與 G 等價,但小數用 F,大數用 E 浮點數、復數、整數(自動轉換為浮點數)
% 百分比格式,數字自動乘上100后按 f 格式排版,并加 % 后綴 浮點數、整數(自動轉換為浮點數)
4.3.7 字串的方法
4.3.7.1 編碼解碼類
4.3.7.1.1 encode(encoding='UTF-8',errors='strict')
描述
對指定的字串進行編碼,編碼后的回傳結果是bytes型別,
errors引數用來設定不同錯誤的處理方案,默認為 'strict',意為編碼錯誤引起一個UnicodeError,其他可能得值有 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace'
示例
s1 = 'ab甲乙'
s2 = s1.encode(encoding='utf-8')
print(s2)
b'ab\xe7\x94\xb2\xe4\xb9\x99'
4.3.7.1.2 decode(encoding="utf-8", errors="strict")
描述
對bytes物件的進行解碼,解碼后的回傳結果為str型別,
errors引數用來設定不同錯誤的處理方案,默認為 'strict',意為編碼錯誤引起一個UnicodeError, 其他可能得值有 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace'
示例
s1 = 'ab甲乙'
s2 = s1.encode(encoding='utf-8')
print(s2)
s3 = s2.decode(encoding='utf-8')
print(s3)
b'ab\xe7\x94\xb2\xe4\xb9\x99'
ab甲乙
4.3.7.2 查找統計類
4.3.7.2.1 count
參見可迭代物件章節中序列小節中的序列count方法
4.3.7.2.2 find(str, beg=0, end=len(string))、rfind
描述
回傳str在string里面出現的索引,未找到則回傳-1,rfind表示從右邊開始查找,
beg引數和end引數代表查找的范圍,默認在整個str中查找,
示例
s = ' Python tian \t mao \n taobao '
print(s.find('o'))
print(s.find('ao'))
print(s.find('io'))
5
16
-1
4.3.7.2.3 index、rindex
可參見可迭代物件章節中序列小節中的序列index方法
4.3.7.3 格式化類
4.3.7.3.1 center(width, fillchar)
描述
回傳一個指定的寬度width居中的字串,fillchar為填充的字符,默認為空格,
示例
s = ' Python tian \t mao taobao '
print(f"|{s.center(30)}|")
print(f"|{s.center(30, '*')}|")
| Python tian mao taobao |
|** Python tian mao taobao **|
4.3.7.3.2 ljust(width[, fillchar])、rjust
描述
回傳一個原字串左(右)對齊,并使用fillchar填充至長度width的新字串,fillchar默認為空格,
示例
s = ' Python tian \t mao taobao '
print(f"|{s.ljust(30)}|")
print(f"|{s.ljust(30, '*')}|")
| Python tian mao taobao |
| Python tian mao taobao ****|
4.3.7.3.3 zfill(width)
描述
回傳長度為width的字串,原字串右對齊,前面填充0
示例
s = ' Python tian \t mao taobao '
print(f"|{s.zfill(30)}|")
|0000 Python tian mao taobao |
4.3.7.4 合并截取類
4.3.7.4.1 join(seq)
描述
以指定字串作為分隔符,將seq中所有的元素(的字串表示)合并為一個新的字串,
示例
seq = ['a', 'b', 'c']
s = '*'.join(seq)
print(s)
abc
4.3.7.4.2 lstrip()、rstrip()
描述
截掉字串左邊(右邊)的空格或指定字符,
示例
s = ' Python tian \t mao taobao '
print(f"|{s.lstrip()}|")
print(f"|{s.rstrip()}|")
print(f"|{s.rstrip('ao ')}|")
|Python tian mao taobao |
| Python tian mao taobao|
| Python tian mao taob|
4.3.7.4.3 split(str="", num=string.count(str))
描述
以str為分隔符截取字串,默認為空格、換行、制表符等,如果 num 有指定值,則僅截取 num+1 個子字串
示例
s = ' Python tian \t mao \n taobao '
print(f"|{s.split()}|")
print(f"|{s.split('o')}|")
|['Python', 'tian', 'mao', 'taobao']|
|[' Pyth', 'n tian \t ma', ' \n ta', 'ba', ' ']|
4.3.7.4.4 splitlines([keepends])
描述
按照行('\r','\r\n',\n')分隔,回傳一個包含各行作為元素的串列,如果引數keepends為False,不包含換行符,如果為True,則保留換行符,
示例
s = ' Python tian \t mao \n taobao '
print(f"|{s.splitlines()}|")
print(f"|{s.splitlines(True)}|")
|[' Python tian \t mao ', ' taobao ']|
|[' Python tian \t mao \n', ' taobao ']|
4.3.7.4.5 strip([chars])
描述
在字串上同時執行lstrip()和rstrip()
示例
s = ' Python tian \t mao taobao '
print(f"|{s.strip()}|")
print(f"|{s.strip('ao ')}|")
|Python tian mao taobao|
|Python tian mao taob|
4.3.7.5 判斷類
4.3.7.5.1 startswith(substr, beg=0,end=len(string))、endswith
描述
檢查字串是否是以指定子字串substr開頭,是則回傳True,否則回傳False,如果beg 和 end 指定值,則在指定范圍內檢查,
示例
s = ' Python tian \t mao taobao '
print(f"|{s.startswith(' ')}|")
print(f"|{s.endswith('a')}|")
|True|
|False|
4.3.7.5.2 islower()、isupper()
描述
如果字串中有可以區分大小寫的字符,并且都是小寫(大寫),則回傳True,否則回傳False
示例
s = ' python tian \t mao 賽車12 '
print(f"|{s.islower()}|")
print(f"|{s.isupper()}|")
|True|
|False|
4.3.7.5.3 isalnum()
描述
如果字串僅包含字母和數字,則回傳True,否則回傳False,
示例
s1 = 'python 賽車12'
print(f"|{s1.isalnum()}|")
s2 = 'python 12'
print(f"|{s2.isalnum()}|")
s3 = 'python12'
print(f"|{s3.isalnum()}|")
|False|
|False|
|True|
4.3.7.5.4 isalpha()
描述
如果字串僅包含字母和文字(中文、日文等),則回傳True,否則回傳False,
示例
s1 = 'python 賽車12'
print(f"|{s1.isalpha()}|")
s2 = 'python 12'
print(f"|{s2.isalpha()}|")
s3 = 'python12'
print(f"|{s3.isalpha()}|")
s4 = 'python賽車'
print(f"|{s4.isalpha()}|")
s5 = 'こんにちは'
print(f"|{s5.isalpha()}|")
|False|
|False|
|False|
|True|
|False|
4.3.7.5.5 isdecimal()
描述
檢查字串是否只包含十進制字符,如果是回傳true,否則回傳false,
示例
s = 'python 賽車12'
print(f"|{s.isdecimal()}|")
s = 'p12'
print(f"|{s.isdecimal()}|")
s = '12'
print(f"|{s.isdecimal()}|")
s = '0x12'
print(f"|{s.isdecimal()}|")
|False|
|False|
|True|
|False|
4.3.7.5.6 isdigit()、isnumeric()
描述
如果字串中僅包含數字,則回傳True,否則回傳False,
4.3.7.5.7 isspace()
描述
如果字串中僅包含空格,則回傳True,否則回傳False,
4.3.7.5.8 istitle()
描述
如果字串中的單詞全都是title格式(首字母大寫),則回傳True,否則回傳False,
4.3.7.6 轉換類
4.3.7.6.1 capitalize()
描述
僅將字串的第一個字符轉換為大寫,如果第一個不是字母,則不做操作,
示例
s = ' python Tian 賽車12 '
print(f"|{s.capitalize()}|")
s = 'python Tian 賽車12 '
print(f"|{s.capitalize()}|")
| python tian 賽車12 |
|Python tian 賽車12 |
4.3.7.6.2 lower()、upper()
描述
將字串中的小寫(大寫)字母全部轉換成大寫(小寫)字母
示例
s = ' pyTHon Tian 賽車12 '
print(f"|{s.lower()}|")
s = 'python Tian 賽車12 '
print(f"|{s.upper()}|")
| python tian 賽車12 |
|PYTHON TIAN 賽車12 |
4.3.7.6.3 replace(old, new [, max])
描述
把將字串中的old替換成new,如果max指定,則替換不超過max次,
示例
s = ' pyTHon Tian 賽車12 '
print(f"|{s.replace('T','*')}|")
print(f"|{s.replace('T','*', 1)}|")
print(f"|{s.replace('Ti','/', 1)}|")
| py*Hon ian 賽車12 |
| pyHon Tian 賽車12 |
| pyTHon /an 賽車12 |
4.3.7.6.4 title()
描述
回傳標題化的字串,就是說所有單詞都是以大寫開始,其余字母均為小寫,
4.3.7.6.5 expandtabs(tabsize)
描述
把字串string中的tab符號轉為空格,tab符號默認的空格數是8,
示例
s = '\tTian 賽車12 '
print(f"|{s}|")
print(f"|{s.expandtabs()}|")
print(f"|{s.expandtabs(2)}|")
| Tian 賽車12 |
| Tian 賽車12 |
| Tian 賽車12 |
4.3.7.6.6 swapcase()
描述
將字串中大寫轉換為小寫,小寫轉換為大寫,
4.3.7.6.7 maketrans()、translate(table, deletechars="")
描述
maketrans用于創建字符映射的轉換表,對于接受兩個引數的最簡單的呼叫方式,第一個引數是字串,表示需要轉換的字符,第二個引數也是字串表示轉換的目標,
translate則根據table給出的表(包含256個字符)轉換string的字符,
這兩個方法組合可以方便快速的對字串多個字符進行替換,
示例
s = ' python Tian 賽車12 '
x = "yo"
y = "ab"
z = "車" # 設定洗掉的字符
mytable = s.maketrans(x, y, z)
print(mytable)
print(s.translate(mytable))
從自動化辦公到智能化辦公{121: 97, 111: 98, 36710: None}
pathbn Tian 賽12
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/499030.html
標籤:Python
