Python 豆知識 — str.partition(sep)
假設有以下字串:
s = 'data1: {"title": "abc", "content": "123"}'
當我們想把字串切成 data1 與 {"title": "abc", "content": "123"} 2 個部分的話,多數人應該直覺會想到 s.split(': ')[0] 與 ': '.join(s.split(': ')[1:]) 這個簡單的方法。
但是上述解法有個問題,因為 : 其實也出現在 data1: 之後的字串裡,所以也被 split(': ') 切割成好幾段,所以 data1: 之後的字串需要再用 (': ').join() 接回來。
要是可以只針對第 1 個 : 字串做分隔就好,將可以省去再 join 後續字串的成本。
針對上述需求,介紹 1 個相對少人知道,但是知道後會很實用的 Python 字串方法:
str.partition(sep)
上述的字串,只要用 partiton() 就可以完美切割出 data1 與後面字串:
>>> s = 'data1: {"title": "abc", "content": "123"}'
>>> s.partition(': ')
('data1', ': ', '{"title": "abc", "content": "123"}')
從上述 partition 結果可以看到, partition 只針對第 1 個 : 字串做分隔,將字串分為 3 個部分:
data1:{"title": "abc", "content": "123"}
這就是 str.partition(sep) 的作用,以第 1 次出現分隔字串(sep)的地方開始做分割,將字串分割為 (分隔字串前, 分隔字串, 分隔字串後) 3 個部分,而且不管有沒有出現分隔字串, str.partition(sep) 都會回傳長度為 3 的 tuple 。
str.partition(sep) 對於只需要將字串分割為 (分隔字串前, 分隔字串, 分隔字串後) 的情況比起使用 str.split(sep) 更加實用!
以上!Python 豆知識,我們下次見!