歡迎關注公眾號:python資料科學家
【要點搶先看】
1.字串的查詢與替換
2.字串的提取、連線與空白去除
3.字串的格式化輸出與型別轉換
4.轉義字元與原始字串
【妹子說】前面一集是初步接觸了字串,這一集可得多講講字串的進階用法呀。
沒問題,首先我們說說python文字處理的頭號工具:字串的查詢與替換。就類似於你在word裡常用的ctrl+f那個功能。
字串的find方法實現子字串查詢的操作,如果包含待查詢的子字串,find方法就返回他的偏移值,如果沒有找到,就返回-1
s = `abcdef`
print(s.find(`cde`))
print(s.find(`xy`))
2
-1
複製程式碼
替換操作運用的是replace方法,引數是原始子字串和用於替換的子字串,之後進行全域性搜尋並替換。
s = `abcdef`
print(s.replace(`bcd`,`XXX`))
aXXXef
複製程式碼
第三個參數列示替換的次數,如果不設定就表示全部替換,否則就表示替換前幾個
再一個就是字串的提取功能,用split方法。利用字串中存在的分隔符,將其拆分成子字串,並返回其所組成的列表,這個在文字獲取及解析的過程中是非常有用的。
s = `Tom,21,USA,UCLA`
l = s.split(`,`)
print(l)
[`Tom`, `21`, `USA`, `UCLA`]
複製程式碼
如果這些字元是空格隔開的,方法也是一模一樣的
s = `Tom 21 USA UCLA`
l = s.split(` `)
print(l)
[`Tom`, `21`, `USA`, `UCLA`]
複製程式碼
那反過來,如果要將列表中的元素連線成一個字串呢,那也有對應的方法,即join方法。他使用指定的分隔符將列表中的元素連線成一個字串,並用指定的分隔符對其進行分割。
這裡的分隔符可以是一個空字元,相當於直接連線
L = [`s`, `p`, `a`, `m`, `m`, `y`]
s = ``.join(L)
print(s)
spammy
複製程式碼
也可以實際指定一個分隔符,如“-”
L = [`s`, `p`, `a`, `m`, `m`, `y`]
s = `-`.join(L)
print(s)
s-p-a-m-m-y
複製程式碼
如果字串的兩側有空格、回車換行等,則可以用strip方法將這些“非內容”部分都去掉,使之變成一個“乾貨”
s = ` Tom 21 USA UCLA
`
print(s)
print(s.strip())
Tom 21 USA UCLA
Tom 21 USA UCLA
複製程式碼
從結果看,字串左側的空格和右側的換行,都被去掉了。
我們再來談談字串的格式化輸出。
python中字串的格式化輸出我覺得非常好用,因為我們並不是總能一開始就能獲得一個資訊完備的字串常量,很多關鍵資訊是在執行時從其他地方獲取並需要動態賦值的。
比如就說我吧,名字是醬油哥,28歲老叔叔,本碩畢業於HUST和THU。如果這裡面的關鍵個人資訊都是在執行的過程中賦值的,那該怎麼用呢?看看這個例子:
name = `醬油哥`
age = 28
school = [`HUST`,`THU`]
s = `name:{},age:{},and graduates from{}`.format(name,age,school)
print(s)
name:醬油哥,age:28,and graduates from[`HUST`, `THU`]
複製程式碼
這裡我們不難發現,每一個花括號就是一個佔位符,後面的變數依次進行對應,最關鍵的是,這三個變數分別是不同的物件型別,甚至還有一個列表物件,但是在字串格式化時不需要我們對此進行任何的區分、處理。
至於說佔位符和格式化方法中各引數的對應關係,上面使用的是預設的情況,即:按順序、一一對應。
當然,也可以顯式的指明各個佔位符的順序
template = `{1},{0} and {2}`
s = template.format(`spam`, `ham`, `eggs`)
print(s)
ham,spam and eggs
複製程式碼
也可以按照鍵的順序進行對應排列,這一種感覺用的更常見一些
template = `{key1},{key2} and {key3}`
s = template.format(key1 = `spam`, key2 = `ham`, key3 = `eggs`)
print(s)
spam,ham and eggs
複製程式碼
在格式化的方法中,還包括一些特殊的數字輸出的案例,我們重點說兩個,一個是浮點數指定位數輸出,一個是二進位制數輸出。
比如,這個例子,我們保留兩位小數輸出浮點數
template = `float number = {:.2f}`
s = template.format(10.4567)
print(s)
float number = 10.46
複製程式碼
再者,用二進位制輸出指定資料
template = `number = {:b}`
s = template.format((2 ** 16) -1)
print(s)
number = 1111111111111111
複製程式碼
最後,我們來談談字串中的轉義符,碰到斜槓進行轉義,這是一個常識,常見的一個例子:
s = `s p
am`
print(s)
s p
Am
複製程式碼
轉義字元有很多,但是我並不是想著重說這個,因為學過C語言的都對此有所瞭解,大不了要用的時候再去查嘛。
這裡要說一下python裡的一個反其道而行之的方法,就是原始字串:
如果想表達一個檔名的時候,轉義字元反而會引入麻煩,裡面的
和 都會被換行符和製表符所替代,此時我們不需要轉義,倒是想所見即所得,這就得使用raw字串,在字串前加一個r就能關閉轉義機制。
s = r`c:
ew est.py`
print(s)
c:
ew est.py
複製程式碼
【妹子問】那python字串可以自由的轉換數字和字串麼?
這個問題很好,python的方便之處就體現在許多這樣的小細節上,我們來談談字串、int型別和浮點型別的轉換。
設想這麼一個背景,如果指令碼從檔案或使用者介面得到一個文字字串形式的數字,則需要使用轉換工具進行預先處理,否則會報錯。
s = `19`
i = 3
print(s+i)
Traceback (most recent call last):
File "E:/12homework/12homework.py", line 3, in <module>
print(s+i)
TypeError: Can`t convert `int` object to str implicitly
複製程式碼
正確的做法是:
將字串轉換為int型
s = `19`
i = 3
print(int(s) + i)
22
複製程式碼
將int型轉換為str型
s = `19`
i = 3
print(s + str(i))
193
複製程式碼
字串和浮點數轉換的方法是
print(float(`1.5`), str(4.56))
複製程式碼
十進位制int和二進位制直接的轉換
print(bin(12))
print(int(`1110`,2))
0b1100
14
複製程式碼
有了這些函式,我們就能十分方便的實現這些轉換功能了。
【妹子說】感覺頭皮略微發麻呀,說實話不太喜歡類似這一集的知識內容,感覺知識點很瑣碎也很刻板。不過沒辦法,都是應用所必須的,那就多加練習吧~
公眾號二維碼:python資料科學家: