下面列舉一些與字符串類型有關(guān)的模塊。
string:字符串操作相關(guān)函數(shù)和工具,比如Template類。
re:正則表達(dá)式,強(qiáng)大的字符串模式匹配模塊。
struct:字符串和二進(jìn)制之間的切換。
c/StringIO:字符串緩沖對象,操作方法類似于file對象。
base64:Base16,32,64數(shù)據(jù)編解碼。
codecs:解碼器注冊和基類。
crypt:進(jìn)行單方面加密。
difflib:找出序列間的不同。
hashlib:多種不同安全哈系算法和信息摘要算法的API,python2.5廢除。
hma:HMAC信息鑒權(quán)算法的python實(shí)現(xiàn)。
md5:RSA的MD5信息摘要鑒權(quán)。
rotor:提供多平臺的加解密服務(wù)。
sha:NIAT的安全哈系算法SHA。
stringprep:提供用于IP協(xié)議的Unicode字符串。
textwrap:文本打包和填充。
unicodedata:Unicode數(shù)據(jù)庫。
Python 3 的源碼的默認(rèn)編碼方式為 UTF-8
在Python 3,所有的字符串都是使用Unicode編碼的字符序列。
utf-8 是一種將字符編碼成字節(jié)序列的方式。字節(jié)即字節(jié),并非字符。字符在計算機(jī)內(nèi)只是一種抽象。字符串則是一種抽象的序列。在這里我們只討論字符串,不討論字節(jié)。
在Python 中,字符串可以用單引號括起來,也可以用雙引號,甚至是三引號。
但如果字符串中含有單引號,你應(yīng)該用雙引號來括,或者用轉(zhuǎn)義符加單引號括起來。含有雙引號的同理。
三引號的字符串可以換行!
>>> 'Let's go!' SyntaxError: invalid syntax >>> "Let's go!" "Let's go!" >>> 'Let\'s go!' "Let's go!" >>> '''''begin and next end''' 'begin\nand\nnext\nend'
字符串是不可修改的,這點(diǎn)很重要!你可以把它想象為字符組成的元組。
>>> s = "HelloWorld" >>> s[0] = 'h' Traceback (most recent call last): File "", line 1, in s[0] = 'h' TypeError: 'str' object does not support item assignment
如果你想修改它,可以先轉(zhuǎn)換成列表,修改完成后再轉(zhuǎn)為字符串。
>>> s 'HelloWorld' >>> L = list(s) >>> L ['H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd'] >>> L[0] = 'h' >>> ''.join(L) #這是什么?別著急,下面我們會談到 'helloWorld'
字符串可以進(jìn)行直接拼接,但如果是兩個變量代表的字符串,你還是用 + 號吧
>>> s = "Hello""World" >>> s 'HelloWorld' >>> s1 = "Hello" >>> s2 = "World" >>> s1s2 Traceback (most recent call last): File "", line 1, in s1s2 NameError: name 's1s2' is not defined >>> s1+s2 'HelloWorld'
字符串操作和方法:
len(s) 返回字符串長度
x in s 查詢 x 是否在 s 中
>>> s = "HelloWorld" >>> len(s) 10 >>> "ll" in s True
s.find( x ) 在字符串 s 中找子串 x ,找到則返回最左端的索引,找不到則返回-1
>>> s 'HelloWorld' >>> s.find("l") 2 >>> s.find('w') -1
s.splitlines() 將多行字符串分割成多個單行字符串組成的列表,換行符被吸收
>>> s = '''''begin ...then.. ...next.. end...''' >>> s.splitlines() ['begin', '...then..', '...next..', 'end...']
s.split( x ) 以 x 作為分隔符將 s 分割成一個字符串列表,如果不提供x,則程序會自動將所有空格和換行作為分隔符分割
>>> s = "here#there" >>> s.split('#') # #作為分隔符 ['here', 'there'] >>> s = '''''begin .then.. and .next. end''' >>> s.split() #默認(rèn)情況將所有換行和空格都分割 ['begin', '.then..', 'and', '.next.', 'end']
s.lower() 返回s 的小寫形式的字符串
s.upper() 返回 s 的大寫形式的字符串
>>> s = 'HelloWorld' >>> s.lower() 'helloworld' >>> s.upper() 'HELLOWORLD'
s.join( seq ) split 的逆方法,將序列 seq 用 s 連接起來,必須是字符串序列
>>> L = ['1','33','42'] >>> '+'.join(L) #用+來連接 '1+33+42' >>> L = list(s) #拆開s >>> L ['H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd'] >>> ''.join(L) #粘合了。。 'HelloWorld'
s.replace( x, y) 將 s 中所有匹配 x 的項(xiàng)用 y 代替,如果找不到,那就直接返回 s 咯
>>> s 'HelloWorld' >>> s.replace("World","Cheng") 'HelloCheng' >>> s.replace("world","Cheng") #知道為什么吧... 'HelloWorld'
s.strip( x ) 如果不提供 x,那么返回去除了首尾兩側(cè)空格的字符串,如果提供了字符串 x,那么將去除s首尾所有在 x 中的字符并返回
>>> s = " Hi,I'm Alice! " >>> s.strip() "Hi,I'm Alice!" >>> s.strip("! ") #這是兩個字符哦 "Hi,I'm Alice" #少了一個感嘆號哦!
再次注意:以上方法都沒有改變原字符串,字符串是不可改變的!
以下簡單看看:
s.starstwith( x ) 測試 s 是否以 x 開頭
s.endswith( x ) 測試 s 是否以 x 結(jié)尾
s.isalnum() 測試 s 是否全是字母和數(shù)字,并至少有一個字符
s.isalpha() 測試 s 是否全是字母,并至少有一個字符
s.isdigit() 測試 s 是否全是數(shù)字,并至少有一個字符
s.isspace() 測試 s 是否全是空白字符,并至少有一個字符
s.islower() 測試 s 中的字母是否全是小寫
s.isupper() 測試 s 中的字母是否便是大寫
s.istitle() 測試 s 是否是首字母大寫的
讓我們重點(diǎn)關(guān)注一個強(qiáng)大的格式化方法 format ,看下面代碼
>>> name = 'Jonh' >>> call = '13560300xxx' >>> "{0}'s telephone number is {1}".format(name,call) # (1) "Jonh's telephone number is 13560300xxx" >>> addr = "A103" >>> "{0}'s telephone number is {1} and his address is {2}".format(name,call,addr) #(2) "Jonh's telephone number is 13560300xxx and his address is A103"
(1)句中,字符串中 {0} 被 format 的第一個參數(shù)代替,{1} 被第二個參數(shù)代替。兩個參數(shù)不夠?事實(shí)上,你可以給予它任意多個參數(shù),然后用相同個數(shù)的替換字段進(jìn)行替換。什么是替換字段?{0},{1}就叫做替換字段。我們在第(2)句中使用了3個替換字段,{0}對應(yīng)name, {1}對應(yīng)call,{2}對應(yīng)addr。再多的參數(shù)也類似于剛才的做法。
那么,僅僅是這樣?當(dāng)然不是!讓我們繼續(xù)看
>>> L = [2,3,5,7] >>> print("x is {0[0]}, y is {0[2]}".format(L)) x is 2, y is 5
{0[0]} 表示L[0],{0[2]} 表示L[2],它們叫做復(fù)合字段名,你可以:
(1)使用列表作為參數(shù),并且通過下標(biāo)索引來訪問其元素(跟上一例類似)
(2)使用字典作為參數(shù),并且通過鍵來訪問其值
>>> d {'b': 2, 'a': 1} >>> print("x is {0[a]}, y is {0[b]}".format(d)) x is 1, y is 2 >>> d = {2:3.5,7:4.5} >>> print("x is {0[2]}, y is {0[7]}".format(d)) x is 3.5, y is 4.5
d 為字典,a 、b為鍵,{0[a]} 對應(yīng)到了值2(注意:是a,b,不是'a', 'b')
(3)使用模塊作為參數(shù),并且通過名字來訪問其變量及函數(shù)
>>> print("{0.random}".format(random))
(4)使用類的實(shí)例作為參數(shù),并且通過名字來訪問其方法和屬性
>>> class A: pass >>> x = A() >>> print("The class is {0.__class__}".format(x)) The class is
(5)以上方法的任意組合
替換字段除了整數(shù),你還可以使用參數(shù)名字
>>> print("{name}'s telephone number is {call}".format(name = "Jonh",call = 69993)) Jonh's telephone number is 69993
在替換域中,你還可以使用格式說明符。冒號 : 標(biāo)示格式說明符的開始。
>>> pi = 3.141592653 >>> print("The pi is {0:10.3f}".format(pi)) # 0:10.3f 表示
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com