Python的友好在于提供了非常好強大的功能函式模塊,對于字串的使用,同樣提供許多簡單便捷的字串函式,Python 字串自帶了很多有用的函式,在字串函式之前先介紹一個非常實用的dir()內置函式,因為對每一個初學者還是大佬級別的python程式員,都不能完全記住所有方法,而該函式可以查看所有這些函式,可呼叫 dir 并將引數指定為任何字串(如 dir("")),其回傳值包括字串可以使用的變數、方法和定義的型別,
>>> dir("")
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__',
'__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count',
'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric',
'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition',
'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
其也提供對功能函式的查詢,比如經常使用的math()函式,所以無論是對后面所闡述的字串函式還是其它函式,我們都可以用dir()內置函式來了解其它函式的型別、定義等等,下面所講述的字串函式會區分其不同功能來分開介紹,其函式的實作功能大致包含以下六個功能:索引特殊字串、設定字符格式、修改字串大小寫、查看字串特定格式、替換特定字串、拆分特定字串,

1 搜索字串函式
假如我們需要在一段字串中查找特定的子串時,通常涉及以下幾個函式:
| 函式名 | 回傳值 |
| string.find(i) | 如果沒有找到子串i,則回傳 -1;否則 回傳 子串i 在 string 中的起始位置 |
| string.rfind(i) | 與 find 相同,但從右往左搜索 |
| string.index(i) | 與 find 相同,但如果在 string 中找不到 i, 則引發 ValueError 例外 |
| string.rindex(i) | 與 index 相同,但從右往左搜索 |
雖然這幾個函式都實作了搜索特定字串的功能,但還是包含一些區別的:
1. 函式 index 和 find 之間的差別在于沒有找到指定子串時的情形 ,示例如下:

函式index會拋出例外 ValueError,而如果沒有找到指定的子串,函式find將回傳 -1,
2.字串搜索函式通常從左往右(從開頭往末尾)搜索,但以 r 打頭的函式從右往左搜索,例如:

可以看到, 函式 find 和 index 回傳傳入字串第一次出現時的起始位置索引,而 rfind 和 rindex 回傳傳入字串最后一次出現時的起始位置索引,
2 設定字串格式函式
下表列出了一些設定字串格式的函式:
| 函式名 | 回傳值 |
| string.center(i) | 回傳一個原字串居中,并使用空格填充至長度 i 的新字串 |
| string.ljust(i) | 回傳一個原字串左對齊,并使用空格填充至長度 i 的新字串 |
| string.rjust(i) | 回傳一個原字串右對齊,并使用空格填充至長度 i 的新字串 |
| string.format(i) | 提供變數,格式化字串(python2.6后新增) |
center(),ljust()和rjust()函式在日常用的使用很少,反倒是Python2.6以后的format()受到了廣大字串處理者的使用,使用format函式需要給它提供變數或者值,一個簡單的例子:字串中的 {0} 和 {1} 參考 format 的引數:它們將被替換為相應字串或變數的值,也可以使用關鍵字引數的名稱,
>>> '{0} like eat {1}'.format('Wangzi','banana')
'Wangzi like eat banana'
>>> '{who} {id} is Linda'.format(who='My',id='name')
'My name is Linda'
這是一些比較簡單的例子,還有更多細節方面的使用可以參考string — Common string operations — Python 3.10.1 documentation,下面舉一個在抓取jmx數值的實際使用案例,在大資料組件使用程序中,我們通常抓取jmx介面的資料獲取詳情,然后將資料接到相關的展示系統中來監控和展示:例如我們需要抓取一個佇列任務扥id,使用者,運行時間等指標值(此處IP做了處理,有問題可以咨詢博主),
import json
import urllib3
import re
def get_ative_resourcemanager(rm1, rm2):
http = urllib3.PoolManager()
rm_list = [rm1, rm2]
for resourcemanager in rm_list:
url = 'http://{0}/ws/v1/cluster/info'.format(resourcemanager)
response = http.request('GET', url)
data = json.loads(response.data)
ha_state = data['clusterInfo']['haState']
if ha_state == "ACTIVE":
return resourcemanager
'''Conversion time function'''
# 毫秒級轉化為hour/minutes
def conver_time(allTime):
hours = (allTime/(60*60*1000))
return hours
'''get active resourcemanager yarn application metrics'''
def get_queue_metrics():
active_resoucemanager = get_ative_resourcemanager('ip1:port',
'ip2:port')
http = urllib3.PoolManager()
url = 'http://{0}/ws/v1/cluster/apps'.format(active_resoucemanager)
response = http.request('GET', url)
data = json.loads(response.data).get('apps').get('app')
length = len(data)
for i in range(length):
'''判斷application狀態'''
application_state = data[i]['state']
queue = data[i]['queue']
queue_name = re.findall(r'root.*',queue,re.IGNORECASE)
#print(mobdi_queue)
if (application_state == 'RUNNING' or application_state == 'ACCEPTED'):
if queue_name:
id_metric = data[i]['id']
user_metric = data[i]['user']
queue_metrics = data[i]['queue']
elapsed_time = data[i]['elapsedTime']
runtime_metric = conver_time(elapsed_time)
print(str(id_metric) + " " + str(user_metric) + " " + str(queue_metrics) + " " + str(runtime_metric))
if __name__ == '__main__':
''''''
get_queue_metrics()
執行結果:

3 改變字串大小寫函式
提供改變字串大小寫的函式有以下五個函式:
| 函式名 | 回傳值 |
| string.capitalize() | 字串的第一個字符大寫 |
| string.lower() | 將 string 中所有大寫字符轉為小寫 |
| string.upper() | 將 string 中的小寫字母轉為大寫 |
| string.swapcase() | 轉變 string 中的大小寫 |
| string.title() | 回傳"標題化"的 string,就是說所有單詞都是以大寫開始,其余字母均為小寫 |

Python 提供了各種修改字母大小寫的函式,如上表,但注意標紅的地方,Python并沒有修改字串,而是在這幾個函式中,創建并回傳一個新字串,并沒有真正修改string源字串,
4 選定字串函式
選定字串函式通常用于洗掉字串開頭或者末尾多余的字串,具體有striip,lstrip和rstrip三個函式,
| 函式名 | 回傳值 |
| string.strip(i) | 從string開頭和末尾洗掉所有包含在字串i中的字符 |
| string.lstrip(i) | 從string開頭(左端)洗掉所有包含在字串i中的字符 |
| string.restrip(i) | 從string末尾(右端)洗掉所有包含在 字串i中的字符 |
1.如果不加字串,將洗掉空白字串:

2.洗掉字串情況:


5 拆分字串函式
Python提供了以下幾個拆分字串的函式,主要將字串拆分成多個子串,
| 函式名 | 回傳值 |
| string.partition(i) | 把string 拆分為三個字串(head,i和tail),其中 head為i前面的子串, 而 tail 為i后面的子串 |
| string. rpartition(i) | 與 partition 相同,但從 string 的右端開始搜索 i |
| string.split(i) | 以 i 為分隔符,將 string 劃分成一系列子串,并回傳一個由這些子串組成的串列 |
| string.rsplit(i) | 與 split 相同,但從 striing 的右端開始搜索 i |
| string.splitlines(i) | 回傳一個由 string 中的各行組成的串列 |

注意示例中存在string和string1兩個字串,函式 partition 和 rpartition 將字串拆分為3部分,這兩個函式總是回傳一個這樣的值:由3個字串組成, 形式為 (head, sep, tail) ;而函式 split 以指定字串為分隔符,將 字串劃分為一系列子串,回傳一個字串串列,串列總是分別以 [ 和 ] 打頭和結尾,并用逗號分隔元素,splitlines函式按照行('\r', '\r\n', \n')分隔,回傳一個包含各行作為元素的串列,使用很少,而且會自行判斷字串是否包含換行符,
6 替換字串函式
Python內置兩個字串替換函式,包括:
| 函式名 | 回傳值 |
| string.replace(old, new) | 將 string 中的每個 old 替換為 new |
| string.expandtabs(i) | 將 string 中的每個制表符替換為 n 個 空格 |

小練習
結合之前的Python字串使用以及Python本身內置的字串處理函式,做個小練習,用代碼實作自定義的replace_替換函式,實作會在下次的文章中實作,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/384277.html
標籤:python
上一篇:Python matplotlib可視化:在Matplotlib中為坐標軸刻度添加自定義符號(例如,貨幣符號¥$等)、水平條形圖(horizontal bar)
