真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

字符串(str、bytes)

4.3 字符串(str、bytes)

4.3.1 字符串前置知識

4.3.1.1 字符串的概念

字符串由一系列字符組成,字符(Character)是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數(shù)字等。字符串是編程語言中表示文本的數(shù)據(jù)類型。
字符串就是由一個個元素(字符)組成的。像這種由一個個元素按照順序組成的數(shù)據(jù),在Python語言里面,把這種特性的數(shù)據(jù)稱之為 sequence,翻譯成中文就是序列。關于序列,我們將在后續(xù)內(nèi)容中詳細介紹。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名申請、虛擬空間、營銷軟件、網(wǎng)站建設、撫順縣網(wǎng)站維護、網(wǎng)站推廣。

4.3.1.2 字符集

字符集是多個字符的集合,字符集種類較多,每個字符集包含的字符個數(shù)不同,常見字符集有:ASCII字符集、GB2312字符集、BIG5字符集、 GB字符集、Unicode字符集等。
字符集簡單來說,就是一張表格,是字符和id的對應表。

4.3.1.3 字符編碼、解碼

因為計算機只能處理數(shù)字,如果要處理文本,就必須先把文本轉換為數(shù)字才能處理。最早的計算機在設計時采用8個比特(bit,也成為)作為一個字節(jié)(byte),所以,一個字節(jié)能表示的最大的整數(shù)就是255(二進制=十進制255),如果要表示更大的整數(shù),就必須用更多的字節(jié)。比如兩個字節(jié)可以表示的最大整數(shù)是,4個字節(jié)可以表示的最大整數(shù)是。
計算機中儲存的信息都是用二進制數(shù)表示的,而我們在屏幕上看到的英文、漢字等字符是二進制數(shù)轉換之后的結果。
通俗的說,按照某種規(guī)則將字符存儲在計算機中,如a用什么表示,稱為編碼;反之,將存儲在計算機中的二進制數(shù)解析成字符顯示出來,稱為解碼,如同密碼學中的加密和解密。
在解碼過程中,如果使用了錯誤的解碼規(guī)則,則會導致目標字符被解析成其它字符或者亂碼。

4.3.1.3.1 編碼發(fā)展史

美國人發(fā)明了計算機,用八位0和1的組合,一一對應英文中的字符,整出了一個表格,ASCII表。也就是大名鼎鼎的ASCII字符集。
ASCII字符集主要包括控制字符(回車鍵、退格、換行鍵等);可顯示字符(英文大小寫字符、阿拉伯數(shù)字和西文符號)。
計算機傳入中國,中國地大物博,繁體字和簡體字多,8位字節(jié)最多表示256個字符,滿足不了人們的日常工作需要,于是對ASCII擴展,新字符集叫GB2312。后來發(fā)現(xiàn)GB2312還不夠用,擴充之后形成GB。
每個國家都像中國一樣,把自己的語言編碼,于是出現(xiàn)了各種各樣的編碼,如果你不安裝相應的編碼,就無法正確解碼查看到正確的內(nèi)容。
由于各個國家的編碼無法進行國際交流。一個國際組織一起創(chuàng)造了一種編碼 UNICODE(Universal Multiple-Octet Coded Character Set)規(guī)定所有字符用兩個字節(jié)表示,就是固定的,所有的字符就兩個字節(jié),計算機容易識別。
UNICODE雖然解決了各自為戰(zhàn)的問題,但是美國人不愿意了,因為美國原來的ASCII只需要一個字節(jié)就可以了。UNICODE編碼卻讓他們的語言多了一個字節(jié),白白浪費一個字節(jié)的存儲空間。經(jīng)過協(xié)商,出現(xiàn)了一種新的轉換格式,被稱為通用轉換格式,也就是UTF(unicode transformation format)。常見的有UTF-8、UTF-16。UTF-8規(guī)定,美國字符一個字節(jié),歐洲兩個字符,東南亞三個字符。

4.3.1.3.2 ASCII編碼

ASCII(American Standard Code for Information Interchange,美國信息交換標準代碼)是基于拉丁字母的一套電腦編碼系統(tǒng)。它主要用于顯示現(xiàn)代英語,而其擴展版本EASCII則可以顯示其他西歐語言。它是現(xiàn)今最通用的單字節(jié)編碼系統(tǒng)。
ASCII編碼將ASCII字符集轉換為計算機系統(tǒng)可以存儲的數(shù)字的編碼規(guī)則。使用7位(bits)表示一個字符,共128字符;但是7位編碼的字符集只能支持128個字符,為了表示更多的歐洲常用字符對ASCII進行了擴展,ASCII擴展字符集使用8位(bits)表示一個字符,共256字符。

4.3.1.3.3 GBXXXX字符集和編碼

GB2312標準共收錄6763個漢字,GB2312對任意字符都采用雙字節(jié)表示。
GBK共收入個漢字和圖形符號,GBK對任意字符都采用雙字節(jié)表示。
GB共收錄漢字個,GB編碼是一二四字節(jié)變長編碼。其單字節(jié),與 ASCII 編碼兼容。
注:GBK兼容GB2312,GB兼容GBK。

4.3.1.3.4 Unicode字符集和編碼

Unicode是國際組織制定的可以容納世界上所有文字和符號的字符編碼方案,記錄著世界上所有字符對應的一個數(shù)字。
Unicode只是一個字符集,并不是一個編碼方式。有2種,一種是UCS-2字符集,利用2個字節(jié)表示字符,一共可以表示個字符。另一種是UCS-4字符集,利用4個字節(jié)表示字符,一共可以表示近43億個字符。每一個碼位可以代表一個字符,可以不通過編碼就直接顯示出來。

4.3.1.3.5 UTF-8編碼

UTF-8 是目前互聯(lián)網(wǎng)上使用最廣泛的一種 Unicode 編碼方式,它的最大特點就是可變長。它可以使用 1 - 4 個字節(jié)表示一個字符,根據(jù)字符的不同變換長度。
UTF-8以字節(jié)為單位對Unicode進行編碼。UTF-8的特點是對不同范圍的字符使用不同長度的編碼。對于0x00—0x7F之間的字符,UTF-8編碼與 ASCII 編碼完全相同。
對于需要使用 N 個字節(jié)來表示的字符(N > 1),第一個字節(jié)的前 N 位都設為 1,第 N + 1 位設為0,剩余的 N - 1 個字節(jié)的前兩位都設位 10,剩下的二進制位則使用這個字符的 Unicode 碼點來填充。

4.3.1.3.6 ANSI編碼

ANSI編碼就是當?shù)叵到y(tǒng)默認編碼,在中國,ANSI編碼默認為GBK。

4.3.1.4 Python中的編碼、解碼

Python3的字符串在Python內(nèi)部的表示是unicode編碼,因此在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。
encode的作用是將unicode編碼轉換成其他編碼的字符串,如str.encode(gbk),表示將unicode編碼的字符串str轉換成gbk編碼。

string = '離離原上草,一歲一枯榮'.encode('gbk')
print(type(string))
print(string)


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., '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方法將其轉換成其他編碼。
通常,在沒有指定特定的編碼方式時,都是使用系統(tǒng)默認編碼創(chuàng)建的代碼文件。

PS:為了方便理解和記憶,可以粗略的將編碼理解為加密,解碼理解為解密。編碼(加密)之前的文本是能看懂的明文,但是編碼(加密)之后就成了看不懂的密文(bytes類型),不同的加密方式就對應不同的編碼方式。只有通過對應的解碼(解密)方式才能正確解密。

4.3.2 字符串的創(chuàng)建

4.3.2.1 通過字符串標識符創(chuàng)建

在Python中可以使用單引號('')或雙引號("")來表示字符串,多行字符串可以使用三重引號 ''' 或 """ 來表示。

'hello,world'
"祝你好運~"
"""
多行內(nèi)容:
離離原上草,一歲一枯榮。
野火燒不盡,春風吹又生。
遠芳侵古道,晴翠接荒城。
又送王孫去,萋萋滿別情。
"""

注意:
1、在Python中,沒有單個字符,只有字符串。單獨的一個字符也是字符串。
2、Python中單引號和雙引號單獨使用完全相同。

4.3.2.2 字符串的拼接和重復

參見可迭代對象章節(jié)中的序列的拼接和重復

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)

這是因為定義字符串時,引號要兩兩配對,而在上面的字符串中出現(xiàn)了3個單引號,無法進行配對。這個時候我們可以用雙引號進行定義字符串:
>>> string = "Let's go"
在定義字符串時,單引號和雙引號都可以。字符串中有單獨的雙引號也同理。
一般的,我們在用雙引號定義字符串時,字符串本身的內(nèi)容中就不能包含雙引號,而在用單引號定義字符串時,字符串本身的內(nèi)容中就不能包含單引號。
但是,如果需要定義的字符串內(nèi)容中既有單引號又有雙引號該怎么辦呢?有2種方法可以處理這種情況:
1、采用三引號定義,三單引號或雙引號都行
2、采用字符轉義

4.3.2.3.2 字符轉義

字符轉義就是用一個特定的符號對某個字符進行轉義,讓這個字符代表其它的意思。在Python中用\對符號進行轉義。常見轉義字符如下:

轉義字符 描述 顯示效果
\ 反斜杠符號 \
' 單引號 '
" 雙引號 "
\b 退格
\n 換行
\t 制表符

如果使用轉義,則上面的示例可以用'Let's go'來表示。雖然單引號包裹的內(nèi)容中含有單引號。但是也不會報錯,因為字符串中的單引號用\進行轉義了。

4.3.2.4 字符串前綴

在Python3中,字符串的類型只有2種,分別是:str、bytes。在字符串前面可以加上前綴,產(chǎn)生不同的效果,比較常用的前綴有:r、u、b。
r:表示之后的字符串中的內(nèi)容不進行轉義,保持原樣
u:表示之后的字符串為Unicode,在Python3中默認所有的字符串為此種類型。
b:表示之后的字符串為bytes類型
windows系統(tǒng)絕對路徑會包含\符號,如果在Python中要表示windows系統(tǒng)的路徑經(jīng)常會報錯,因為會將路徑中的\及后面的字符當成轉義符進行轉義,對于日常使用非常不方便。這個時候就可以用到r前綴:
>>> print('C:\new\name') # 這里的\n代表換行,與預期不符

C:\new
ame

>>> print(r'C:\new\name') # 字符串中的內(nèi)容原樣顯示

C:\some\name

這樣,上面的字符串中的\n才不會當成換行符顯示。而是保持原樣。

4.3.3 字符串的訪問

4.3.3.1 字符串索引

參見可迭代對象章節(jié)中的序列的索引

4.3.3.2 字符串切片

參見可迭代對象章節(jié)中的序列的切片

4.3.3.3 遍歷字符串

參見可迭代對象章節(jié)中的可迭代對象的遍歷

4.3.3.4 成員資格檢查

參見可迭代對象章節(jié)中的成員資格檢查

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 字符串格式化

如果對字符串的輸出的格式有要求,需要用到字符串的格式化。比如,在群發(fā)短信時,每次的名稱不一樣,但是內(nèi)容是一樣的,這個時候就需要用到字符串的格式化。

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)

四大天王:黎明, 華仔, 郭富城, 張學友

在字符串內(nèi)部,%s表示用字符串替換,%d表示用整數(shù)替換,有幾個%?占位符,后面就跟幾個變量或者值,順序要對應好。如果只有一個%?,后面變量的括號可以省略。
%格式化中常見的占位符:

占位符 替換內(nèi)容
%d 整數(shù)
%f 浮點數(shù)
%s 字符串
%x 十六進制整數(shù)

其中,格式化整數(shù)和浮點數(shù)還可以指定是否補0和整數(shù)與小數(shù)的位數(shù):

print('%9d-%09d' % (3, 1))
print('%.6f' % 3.)
      3-000000001

3.

如果你不太確定應該用什么,%s永遠起作用,它會把任何數(shù)據(jù)類型轉換為字符串:
>>> 'Age: %s. Gender: %s' % (25, True)

'Age: 25. Gender: True'

關于自定義格式,將會在后面的自定義格式章節(jié)進行詳細介紹。
使用%轉義百分號
>>> 'growth rate: %d %%' % 7

'growth rate: 7 %'

4.3.6.2 format

format是Python2.6開始新增的一種格式化字符串的函數(shù),它會用傳入的參數(shù)依次替換字符串內(nèi)的占位符{0}、{1}……
使用方法:通過format函數(shù)中的參數(shù)來代替字符串中的{}內(nèi)容。
指定位置
>>> "{} {}".format("hello", "world") # 不設置指定位置,按默認順序
>>> "{1} {0} {1}".format("hello", "world") # 設置指定位置

'hello world'
'world hello world'

設置參數(shù)
>>> "網(wǎng)站名:{name}, 地址:{url}".format(name="本", url="www.ben.com")

'網(wǎng)站名:本, 地址:www.ben.com'

通過字典設置參數(shù)
>>> site = {"name": "本", "url": "www.ben.com"}
>>> "網(wǎng)站名:{name}, 地址 {url}".format(**site)

'網(wǎng)站名:本, 地址:www.ben.com'

通過列表索引設置參數(shù)
>>> my_list = ['本', 'www.ben.com']
>>> "網(wǎng)站名:{0[0]}, 地址 {0[1]}".format(my_list) # "0" 是必須的

'網(wǎng)站名:本, 地址:www.ben.com'

使用{}轉義大括號
>>> "{} 對應的位置是 {{10}}".format("ben")

ben對應的位置是 {10}

你還可以指定要轉換的值是哪種類型,更準確地說,是要將其視為哪種類型。例如,你可能提供一個整數(shù),但將其作為小數(shù)進行處理。為此可在格式說明(即冒號后面)使用字符f(表示定點數(shù))。
>>> "π is {:.2f}".format(3.)

'π is 3.14'

關于自定義格式,將會在后面的自定義格式章節(jié)進行詳細介紹。

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在功能方面不遜于傳統(tǒng)的%-formatting語句和str.format()函數(shù),同時性能又優(yōu)于二者,且使用起來也更加簡潔明了,因此對于Python3.6及以后的版本,推薦使用f-string進行字符串格式化。
簡單使用
f-string用大括號 {} 表示被替換字段,其中直接填入替換內(nèi)容:
>>> 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'

表達式求值與函數(shù)調(diào)用
f-string的大括號 {} 可以填入表達式或調(diào)用函數(shù),Python會求出其結果并填入返回的字符串內(nèi):

>>> f'A total number of {24 * 8 + 4}'

'A total number of 196'

>>> f'Complex number {(2 + 2j) /(2 - 3j)}'

'Complex number(-0.+0.j)'

>>> 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.'

引號、大括號與反斜杠
f-string大括號內(nèi)所用的引號不能和大括號外的引號定界符沖突,可根據(jù)情況靈活切換 ' 和 ":

>>> f'I am {"Eric"}'

'I am Eric'

>>> f'I am {'Eric'}'

File "", line 1
  f'I am {'Eric'}'
              ^

SyntaxError: invalid syntax

若 ' 和 " 不足以滿足要求,還可以使用 ''' 和 """。
大括號外的引號還可以使用 \ 轉義,但大括號內(nèi)不能使用 \ 轉義:

>>> f'''He'll say {"I'm Eric"}'''

"He'll say I'm Eric"

>>> f'''He'll say {"I'm Eric"}'''

File "", line 1

SyntaxError: f-string expression part cannot include a backslash

f-string大括號外如果需要顯示大括號,則應輸入連續(xù)兩個大括號 {{ 和 }}:
>>> f'5 {"{stars}"}'
>>> f'{{5}} {"stars"}'

'5 {stars}'
'{5} stars'

上面提到,f-string大括號內(nèi)不能使用 \ 轉義,事實上不僅如此,f-string大括號內(nèi)根本就不允許出現(xiàn) \。如果確實需要 \,則應首先將包含 \ 的內(nèi)容用一個變量表示,再在f-string大括號內(nèi)填入變量名。

4.3.6.2 自定義格式

通過對上述3種格式化字符串的方法的學習,我們可以大致的了解在格式化字符串中用到的自定義格式。
這3種格式化字符串的方法中都可以用到自定義格式,方法也大同小異。下面就詳細的來介紹下如何自定義格式。
主要包括:對齊、寬度、符號、補零、精度、進制等

4.3.6.2.1 對齊相關

< 左對齊(字符串默認對齊方式),&格式化使用-

右對齊(數(shù)值默認對齊方式) ,&格式化使用+
^ 居中,適用于f-stringformat

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 數(shù)字符號相關格式描述符
  •   負數(shù)前加負號(-),正數(shù)前加正號(+)
    
  •   負數(shù)前加負號(-),正數(shù)前不加任何符號(默認)
    

空格 負數(shù)前加負號(-),正數(shù)前加一個空格

注:僅適用于數(shù)值類型。

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 整數(shù) width 指定寬度
0width 整數(shù) width 指定寬度,開頭的 0 指定高位用 0 補足寬度
width.precision 整數(shù) width 指定寬度,整數(shù) precision 指定顯示精度

注意:
1、0width 不可用于復數(shù)類型和非數(shù)值類型,width.precision 不可用于整數(shù)類型。
2、width.precision 用于不同格式類型的浮點數(shù)、復數(shù)時的含義也不同:用于 f、F、e、E 和 % 時 precision 指定的是小數(shù)點后的位數(shù),用于 g 和 G 時 precision 指定的是有效數(shù)字位數(shù)(小數(shù)點前位數(shù)+小數(shù)點后位數(shù))。
3、width.precision 除浮點數(shù)、復數(shù)外還可用于字符串,此時 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、僅適用于浮點數(shù)、復數(shù)與十進制整數(shù):對于浮點數(shù)和復數(shù),, 只分隔小數(shù)點前的數(shù)位。
3、
適用于浮點數(shù)、復數(shù)與二、八、十、十六進制整數(shù):對于浮點數(shù)和復數(shù),_ 只分隔小數(shù)點前的數(shù)位;對于二、八、十六進制整數(shù),固定從低位到高位每隔四位插入一個 _(十進制整數(shù)是每隔三位插入一個 _)。

var1 = 
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 二進制整數(shù)格式 整數(shù)
c 字符格式,按unicode編碼將整數(shù)轉換為對應字符 整數(shù)
d 十進制整數(shù)格式 整數(shù)
o 八進制整數(shù)格式 整數(shù)
x 十六進制整數(shù)格式(小寫字母) 整數(shù)
X 十六進制整數(shù)格式(大寫字母) 整數(shù)
e 科學計數(shù)格式,以 e 表示 ×10^ 浮點數(shù)、復數(shù)、整數(shù)(自動轉換為浮點數(shù))
E 與 e 等價,但以 E 表示 ×10^ 浮點數(shù)、復數(shù)、整數(shù)(自動轉換為浮點數(shù))
f 定點數(shù)格式,默認精度(precision)是6 浮點數(shù)、復數(shù)、整數(shù)(自動轉換為浮點數(shù))
F 與 f 等價,但將 nan 和 inf 換成 NAN 和 INF 浮點數(shù)、復數(shù)、整數(shù)(自動轉換為浮點數(shù))
g 通用格式,小數(shù)用 f,大數(shù)用 e 浮點數(shù)、復數(shù)、整數(shù)(自動轉換為浮點數(shù))
G 與 G 等價,但小數(shù)用 F,大數(shù)用 E 浮點數(shù)、復數(shù)、整數(shù)(自動轉換為浮點數(shù))
% 百分比格式,數(shù)字自動乘上100后按 f 格式排版,并加 % 后綴 浮點數(shù)、整數(shù)(自動轉換為浮點數(shù))

4.3.7 字符串的方法

4.3.7.1 編碼解碼類

4.3.7.1.1 encode(encoding='UTF-8',errors='strict')

描述
對指定的字符串進行編碼。編碼后的返回結果是bytes類型。
errors參數(shù)用來設置不同錯誤的處理方案。默認為 '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參數(shù)用來設置不同錯誤的處理方案。默認為 '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 查找統(tǒng)計類

4.3.7.2.1 count

參見可迭代對象章節(jié)中序列小節(jié)中的序列count方法

4.3.7.2.2 find(str, beg=0, end=len(string))、rfind

描述
返回str在string里面出現(xiàn)的索引。未找到則返回-1。rfind表示從右邊開始查找。
beg參數(shù)和end參數(shù)代表查找的范圍,默認在整個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

可參見可迭代對象章節(jié)中序列小節(jié)中的序列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')分隔,返回一個包含各行作為元素的列表,如果參數(shù)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])

描述
在字符串上同時執(zhí)行l(wèi)strip()和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 指定值,則在指定范圍內(nèi)檢查。
示例

s = ' Python tian \t mao taobao '
print(f"|{s.startswith(' ')}|")
print(f"|{s.endswith('a')}|")

|True|
|False|

4.3.7.5.2 islower()、isupper()

描述
如果字符串中有可以區(qū)分大小寫的字符,并且都是小寫(大寫),則返回True,否則返回False
示例

s = ' python tian \t mao 賽車12 '
print(f"|{s.islower()}|")
print(f"|{s.isupper()}|")

|True|
|False|

4.3.7.5.3 isalnum()

描述
如果字符串僅包含字母和數(shù)字,則返回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()

描述
如果字符串中僅包含數(shù)字,則返回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 |
| py
Hon Tian 賽車12 |
| pyTHon /an 賽車12 |

4.3.7.6.4 title()

描述
返回標題化的字符串,就是說所有單詞都是以大寫開始,其余字母均為小寫。

4.3.7.6.5 expandtabs(tabsize)

描述
把字符串string中的tab符號轉為空格,tab符號默認的空格數(shù)是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用于創(chuàng)建字符映射的轉換表,對于接受兩個參數(shù)的最簡單的調(diào)用方式,第一個參數(shù)是字符串,表示需要轉換的字符,第二個參數(shù)也是字符串表示轉換的目標。
translate則根據(jù)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, : None}
pathbn Tian 賽12


新聞標題:字符串(str、bytes)
本文來源:http://weahome.cn/article/dsogges.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部