給妹子講python-S01E06字串使用方法進階

醬油哥在掘金發表於2019-02-14

歡迎關注公眾號: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 3in <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資料科學家:

給妹子講python-S01E06字串使用方法進階

相關文章