python3從零學習-5.1.1、文本庫str

本節來講一下文本處理相關的庫
  • str
字符串定義:
在 Python 中處理文本數據是使用 str 對象,也稱爲 字符串。 字符串是由 Unicode 碼位構成的不可變序列。 
字符串字面值有多種不同的寫法:
單引號: '允許包含有 "雙" 引號’
雙引號: "允許包含有 '單' 引號”
三重引號: '''三重單引號'''"""三重雙引號"""
使用三重引號的字符串可以跨越多行 —— 其中所有的空白字符都將包含在該字符串字面值中。

class str(object='')

class str(object=b''encoding='utf-8'errors='strict')
返回 object 的 字符串 版本。 如果未提供 object 則返回空字符串。 在其他情況下 str() 的行爲取決於 encoding 或 errors 是否有給出。
 
-r 表示字符串中所有的字符表示其本身,比如,反斜槓就是反斜槓,不是用來轉義的,'\n' 表示換行符,是一個字符,而 r'\n' 則是兩個字符:一個反斜槓、一個小寫n。
-u 表示字符串是Unicode字符串,在Python 3中保留是爲了兼容Python 2,而Python 3中的字符串默認都是Unicode字符串,在Python 3中,不需要添加,而且不能和 r 一起使用。
 
字符串方法:
str.capitalize()
        返回原字符串的副本,其首個字符大寫,其餘爲小寫。
示例:
print(str.capitalize('a我是個字符串’))
 
輸出:
A我是個字符串
 
str.casefold()
        返回原字符串消除大小寫的副本。 消除大小寫的字符串可用於忽略大小寫的匹配。
        消除大小寫類似於轉爲小寫,但是更加徹底一些,因爲它會移除字符串中的所有大小寫變化形式。 
        例如,德語小寫字母 'ß' 相當於 "ss"。 由於它已經是小寫了,lower() 不會對 'ß' 做任何改變;而 casefold() 則會將其轉換爲 "ss"。
示例:
print(str.casefold('ABGQ我是個字符串'))
 
輸出:
abgq我是個字符串
 
str.center(width[, fillchar])
        返回長度爲 width 的字符串,原字符串在其正中。 
        使用指定的 fillchar 填充兩邊的空位(默認使用 ASCII 空格符)。 如果 width 小於等於 len(s) 則返回原字符串的副本。
示例:
test_str = str('ABGQ我是個字符串')
print(test_str.center(20, 'M'))
 
輸出:
MMMMMABGQ我是個字符串MMMMM
 
str.count(sub[, start[, end]])
        反回子字符串 sub 在 [start, end] 範圍內非重疊出現的次數。 可選參數 start 與 end 會被解讀爲切片表示法。
示例:
test_str = str('ABGQ我是個字符串ABGQ')
 
print(test_str.count('A’))               # 統計A在test_str中出現的次數
print(test_str[0:5])                     # 0到5位置的字符串是“ABGQ我”
print(test_str.count('A', 0, 5))         # 統計A在test_str字符串,[0,5]範圍內出現的次數,[0,5]範圍是‘ABGQ我’,所以統計出來的個數是1個
 
輸出:
2
ABGQ我
1
 
str.encode(encoding="utf-8", errors="strict")
        返回原字符串編碼爲字節串對象的版本。 默認編碼爲 'utf-8’。 
        可以給出 errors 來設置不同的錯誤處理方案。 errors 的默認值爲 'strict',表示編碼錯誤會引發 UnicodeError。 
        其他可用的值爲 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及任何其他通過 codecs.register_error() 註冊的值。
示例:
test_str = str('ABGQ我是個字符串ABGQ')
 
print(test_str.encode())    # 默認編碼 ‘utf-8’
print(test_str)             # 說明encode操作不會改變test_str
 
輸出:
b'ABGQ\xe6\x88\x91\xe6\x98\xaf\xe4\xb8\xaa\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2ABGQ'
ABGQ我是個字符串ABGQ
 
str.endswith(suffix[, start[, end]])
        如果字符串以指定的 suffix 結束返回 True,否則返回 False。 suffix 也可以爲由多個供查找的後綴構成的元組。 
        如果有可選項 start,將從所指定位置開始檢查。 如果有可選項 end,將在所指定位置停止比較。
示例:
test_str = str('ABGQ我是個字符串ABGQ')
 
print(test_str.endswith('BGQ'))
print(test_str.endswith('BG'))
print(test_str.endswith('BGQ', 0, 4))  #比較[0:4]就是‘ABGQ’字符串的結尾是否是’BGQ’,所以這裏是True
print(test_str.endswith('BGQ', 0, 5))  #比較[0:5]就是’ABGQ我’字符串的結尾是否是’BGQ’,所以這裏是False
 
輸出:
True
False
True
False
 
str.expandtabs(tabsize=8)
        返回字符串的副本,其中所有的製表符會由一個或多個空格替換,具體取決於當前列位置和給定的製表符寬度。 每 tabsize 個字符設爲一個製表位(默認值 8 時設定的製表位在列 0, 8, 16 依次類推)。 要展開字符串,當前列將被設爲零並逐一檢查字符串中的每個字符。 如果字符爲製表符 (\t),則會在結果中插入一個或多個空格符,直到當前列等於下一個製表位。 (製表符本身不會被複制。) 如果字符爲換行符 (\n) 或回車符 (\r),它會被複制並將當前列重設爲零。 任何其他字符會被不加修改地複製並將當前列加一,不論該字符在被打印時會如何顯示。
>>> '01\t012\t0123\t01234'.expandtabs()
'01      012     0123    01234'
>>> '01\t012\t0123\t01234'.expandtabs(4)
'01  012 0123    01234'
 
str.find(sub[, start[, end]])
        返回子字符串 sub 在 s[start:end] 切片內被找到的最小索引。 可選參數 start 與 end 會被解讀爲切片表示法。 如果 sub 未被找到則返回 -1。
示例:
test_str = str('ABGQ我是個字符串ABGQ')
 
print(test_str.find('A’))      # 從頭開始找第一個A所在的位置索引,所以是0
print(test_str.find('Q’))      # 從頭開始找第一個Q所在的位置索引,所以是3
print(test_str.find('個’))     # 從頭開始找第一個“個”所在的位置索引,所以是6
print(test_str.find('B', 5))   # 從位置索引是5的地方開始找第一個B所在的位置索引,所以是11
print(test_str.find('K’))      # 從頭開始找第一個K所在的位置索引,因爲沒找到,所以返回-1
 
輸出:
0
3
6
11
-1
 
str.format(*args, **kwargs)
        執行字符串格式化操作。 
        調用此方法的字符串可以包含字符串字面值或者以花括號 {} 括起來的替換域。 
        每個替換域可以包含一個位置參數的數字索引,或者一個關鍵字參數的名稱。 
        返回的字符串副本中每個替換域都會被替換爲對應參數的字符串值。
示例:
addend1 = 3
addend2 = 6
sum = addend1 + addend2
# format 以位置參數做替換域 
print('the sum is {0} + {1} = {2}'.format(addend1, addend2, sum))
# format 以關鍵字參數做替換域
print('the sum is {addend1_name} + {addend2_name} = {sum_name}'.format(addend1_name=addend1, addend2_name=addend2, sum_name=sum))
 
輸出:
the sum is 3 + 6 = 9
the sum is 3 + 6 = 9
 
str.index(sub[, start[, end]])
        類似於 find(),但在找不到子類時會引發 ValueError。
示例:
test_str = str('ABGQ我是個字符串ABGQ')
test_str.index('H’)
 
輸出:
    test_str.index('H')
ValueError: substring not found
 
str.isalnum()
        如果字符串中的所有字符都是字母數字,並且至少有一個字符,則返回true,否則爲false。
        如果下面其中一個返回True,則字符c是字母數字:c.isalpha()、c.isdecimal()、c.isdigit()或c.isnumeric()。
示例:
test_str1 = str('99ABGQ我是個字符串ABGQ33')
print(test_str1.isalnum())
 
test_str2 = str('#99ABGQ我是個字符串ABGQ33%')
print(test_str2.isalnum())
 
輸出:
True
False
 
str.isalpha()
        如果字符串中的所有字符都是字母順序的,並且至少有一個字符,則返回true,否則返回false。
        字母字符是在Unicode字符數據庫中定義爲“字母”的字符,即,一般類別屬性爲“Lm”、“Lt”、“Lu”、“Ll”或“Lo”的。
        注意,這與Unicode標準中定義的“Alphabetic”屬性不同。
示例:
test_str1 = str('99ABGQ我是個字符串ABGQ33’)    #包含數字,所以返回False
print(test_str1.isalpha())
 
test_str2 = str('ABGQ我是個字符串ABGQ’)        #純Unicode字符,所以返回True。中文漢字也是Unicode字符。
print(test_str2.isalpha())
 
輸出:
False
True
 
str.isdecimal()
        如果字符串中的所有字符都是十進制字符,並且至少有一個字符,則返回true,否則返回false。
        十進制字符是那些可以用來形成以10爲基數的數字的字符,例如U+0660,阿拉伯-印度數字0。在形式上,十進制字符是Unicode通用類別“Nd”中的字符。
示例:
test_str1 = str('99ABGQ我是個字符串ABGQ33')
print(test_str1.isdecimal())
 
test_str2 = str('01234567890’)    #十進制基數的字符“0123456789”
print(test_str2.isdecimal())
 
輸出:
False
True
 
str.isdigit()
        如果字符串中的所有字符都是數字,並且至少有一個字符,則返回true,否則返回false。
        數字包括十進制字符和需要特殊處理的數字,如兼容性上標數字。這包括不能用於以10爲基數形成數字的數字,如Kharosthi數字。
        在形式上,數字是具有屬性值Numeric_Type= digit或Numeric_Type=Decimal的字符。
 
str.isidentifier()
        如果字符串是一個有效的標識符,則返回true,否則返回false。
示例:
test_str = str('school’)         # 有效的標識符
print(test_str.isidentifier())
 
test_str = str('1school’)        # 無效的標識符,因爲是數字開頭的字符串
print(test_str.isidentifier())
 
輸出:
True
False
 
str.islower()
        如果字符串中都是小寫字母,並且至少有一個字符,則返回true,否則返回false。
示例:
test_str = str('99school我@#¥’)  #都是小寫字母,返回true
print(test_str.islower())
 
test_str = str('99我是誰@#¥’)     #沒有字母,返回false
print(test_str.islower())
 
test_str = str('Who am I?’)      #包含大寫字母,返回false
print(test_str.islower())
 
輸出:
True
False
False
 
str.isupper()
        如果字符串中都是大寫字母,並且至少有一個字符,則返回true,否則返回false。
示例:
test_str = str('i am shanhai')
print(test_str.isupper())        #包含了小寫字母,所以返回false
 
test_str = str('I Am Shanhai')
print(test_str.isupper())        #包含了小寫字母,所以返回false
 
test_str = str('I AM SHANHAI')
print(test_str.isupper())        #全部是大寫字母,所以返回true
 
輸出:
False
False
True
 
str.isnumeric()
        如果字符串中的所有字符都是數字字符,並且至少有一個字符,則返回true,否則爲false。
        數字字符包括數字字符,以及所有具有Unicode數值屬性的字符。
        在形式上,數字字符是那些具有屬性值Numeric_Type=Digit、Numeric_Type=Decimal或Numeric_Type= numeric的字符。
 
str.isprintable()
        如果字符串中的所有字符都可打印或字符串爲空,則返回true,否則返回false。
        不可打印字符是Unicode字符數據庫中定義爲“其他”或“分隔符”的字符,ASCII空格(0x20)除外,它被認爲是可打印的。
        注意,在這個上下文中,可打印字符是在字符串上調用repr()時不應該轉義的字符。它與向sys寫入的字符串的處理無關。stdout或sys.stderr。
 
str.isspace()
        如果字符串中只有空白字符並且至少有一個字符,則返回true,否則返回false。
        空白字符是Unicode字符數據庫中定義爲“其他”或“分隔符”的字符,而具有雙向屬性的字符是“WS”、“B”或“S”之一。
 
str.istitle()
        如果字符串是有標題的字符串,並且至少有一個字符,則返回true。
        例如大寫字符只能跟在無大小寫字符後面,小寫字符只能跟在大小寫字符後面。否則返回假。
 
str.join(iterable)
        返回一個由 iterable 中的字符串拼接而成的字符串。 
        如果 iterable 中存在任何非字符串值包括 bytes 對象則會引發 TypeError。 調用該方法的字符串將作爲元素之間的分隔。
 
str.ljust(width[, fillchar])
        返回長度爲 width 的字符串,原字符串在其中靠左對齊。 
        使用指定的 fillchar 填充空位 (默認使用 ASCII 空格符)。 如果 width 小於等於 len(s) 則返回原字符串的副本。
 
str.rjust(width[, fillchar])
        返回長度爲 width 的字符串,原字符串在其中靠右對齊。 
        使用指定的 fillchar 填充空位 (默認使用 ASCII 空格符)。 如果 width 小於等於 len(s) 則返回原字符串的副本。
 
str.lstrip([chars])
        返回原字符串的副本,移除其中的前導字符。 chars 參數爲指定要移除字符的字符串。 
        如果省略或爲 None,則 chars 參數默認移除空格符。 實際上 chars 參數並非指定單個前綴;而是會移除參數值的所有組合。
 
str.rstrip([chars])
        返回原字符串的副本,移除其中的末尾字符。 chars 參數爲指定要移除字符的字符串。 
        如果省略或爲 None,則 chars 參數默認移除空格符。 實際上 chars 參數並非指定單個後綴;而是會移除參數值的所有組合。
 
str.partition(sep)
        在 sep 首次出現的位置拆分字符串,返回一個 3 元組,其中包含分隔符之前的部分、分隔符本身,以及分隔符之後的部分。 
        如果分隔符未找到,則返回的 3 元組中包含字符本身以及兩個空字符串。
 
str.replace(old, new[, count])
        返回字符串的副本,其中出現的所有子字符串 old 都將被替換爲 new。 如果給出了可選參數 count,則只替換前 count 次出現。
 
str.rfind(sub[, start[, end]])
        返回子字符串 sub 在字符串內被找到的最大(最右)索引,這樣 sub 將包含在 s[start:end] 當中。 
        可選參數 start 與 end 會被解讀爲切片表示法。 如果未找到則返回 -1。
 
str.rindex(sub[, start[, end]])
        類似於 rfind(),但在子字符串 sub 未找到時會引發 ValueError。
 
str.rpartition(sep)
        在 sep 最後一次出現的位置拆分字符串,返回一個 3 元組,其中包含分隔符之前的部分、分隔符本身,以及分隔符之後的部分。 
        如果分隔符未找到,則返回的 3 元組中包含兩個空字符串以及字符串本身。
 
str.rsplit(sep=None, maxsplit=-1)
        返回一個由字符串內單詞組成的列表,使用 sep 作爲分隔字符串。 如果給出了 maxsplit,則最多進行 maxsplit 次拆分,從 最右邊 開始。 
        如果 sep 未指定或爲 None,任何空白字符串都會被作爲分隔符。 除了從右邊開始拆分,rsplit() 的其他行爲都類似於下文所述的 split()。
 
str.split(sep=None, maxsplit=-1)
        返回一個由字符串內單詞組成的列表,使用 sep 作爲分隔字符串。 
        如果給出了 maxsplit,則最多進行 maxsplit 次拆分(因此,列表最多會有 maxsplit+1 個元素)。 
        如果 maxsplit 未指定或爲 -1,則不限制拆分次數(進行所有可能的拆分)。
        如果給出了 sep,則連續的分隔符不會被組合在一起而是被視爲分隔空字符串 (例如 '1,,2'.split(',') 將返回 ['1', '', '2'])。 
        sep 參數可能由多個字符組成 (例如 '1<>2<>3'.split('<>') 將返回 ['1', '2', '3'])。 使用指定的分隔符拆分空字符串將返回 ['']。
 
str.splitlines([keepends])
        返回由原字符串中各行組成的列表,在行邊界的位置拆分。 結果列表中不包含行邊界,除非給出了 keepends 且爲真值。
        此方法會以下列行邊界進行拆分。 特別地,行邊界是 universal newlines 的一個超集。
 
str.startswith(prefix[, start[, end]])
        如果字符串以指定的 prefix 開始則返回 True,否則返回 False。 prefix 也可以爲由多個供查找的前綴構成的元組。 
        如果有可選項 start,將從所指定位置開始檢查。 如果有可選項 end,將在所指定位置停止比較。
 
str.strip([chars])
        返回原字符串的副本,移除其中的前導和末尾字符。 chars 參數爲指定要移除字符的字符串。 
        如果省略或爲 None,則 chars 參數默認移除空格符。 實際上 chars 參數並非指定單個前綴或後綴;而是會移除參數值的所有組合。
例:
test_str = str(' i am shanhai ')
print(test_str.strip())          #移除了字符串前後的空格符
 
test_str = str('i am shanhai')
print(test_str.strip('i’))      #移除字符串前後的’i’
 
輸出:
i am shanhai
 am shanha
 
str.swapcase()
        返回原字符串的副本,其中大寫字符轉換爲小寫,反之亦然。 
        請注意 s.swapcase().swapcase() == s 並不一定爲真值。
示例:
test_str = str('I Am Shanhai')
print(test_str.swapcase())
 
輸出:
i aM sHANHAI
 
str.title()
        返回原字符串的標題版本,其中每個單詞第一個字母爲大寫,其餘字母爲小寫。
示例:
test_str = str('i am shanhai')
print(test_str.title()) 
 
輸出:
I Am Shanhai
 
static str.maketrans(x[, y[, z]])
        此靜態方法返回一個可供 str.translate() 使用的轉換對照表。
        如果只有一個參數,則它必須是一個將 Unicode 碼位序號(整數)或字符(長度爲 1 的字符串)映射到 Unicode 碼位序號、(任意長度的)字符串或 None 的字典。 
        字符鍵將會被轉換爲碼位序號。
        如果有兩個參數,則它們必須是兩個長度相等的字符串,並且在結果字典中,x 中每個字符將被映射到 y 中相同位置的字符。 
        如果有第三個參數,它必須是一個字符串,其中的字符將在結果中被映射到 None。
 
str.translate(table)
        返回原字符串的副本,其中每個字符按給定的轉換表進行映射。 轉換表必須是一個使用 __getitem__() 來實現索引操作的對象,通常爲 mapping 或 sequence。 
        當以 Unicode 碼位序號(整數)爲索引時,轉換表對象可以做以下任何一種操作:返回 Unicode 序號或字符串,將字符映射爲一個或多個字符;
        返回 None,將字符從結果字符串中刪除;或引發 LookupError 異常,將字符映射爲其自身。
        你可以使用 str.maketrans() 基於不同格式的字符到字符映射來創建一個轉換映射表。
示例:
transverter_before = 'abcde'
transverter_after = '12345'
 
transverter_table = str.maketrans(transverter_before, transverter_after) # 建立轉換表
 
test_str = str('+@AB我是個字符串abgq')
print(test_str.translate(transverter_table)) #把’abcde'用'12345’替換,所以這裏a替換成1,b替換成2,其他字符不變。
 
輸出:
+@AB我是個字符串12gq
 
str.lower()
        返回原字符串的副本,其所有區分大小寫的字符均轉換爲小寫。
示例:
test_str = str('ABGQ我是個字符串ABGQ')
print(test_str.lower())
 
輸出:
abgq我是個字符串abgq
 
str.upper()
        返回原字符串的副本,其中所有區分大小寫的字符 4 均轉換爲大寫。 
        請注意如果 s 包含不區分大小寫的字符或者如果結果字符的 Unicode 類別不是 “Lu” (Letter, uppercase) 而是 “Lt” (Letter, titlecase) 則 s.upper().isupper() 有可能爲 False。
示例:
test_str = str('+@AB我是個字符串abgq')
print(test_str.upper())
 
輸出:
+@AB我是個字符串ABGQ
 
str.zfill(width)
        返回原字符串的副本,在左邊填充 ASCII '0' 數碼使其長度變爲 width。 正負值前綴 ('+'/'-') 的處理方式是在正負符號 之後 填充而非在之前。 
        如果 width 小於等於 len(s) 則返回原字符串的副本。
示例:
test_str = str('ABGQ我是個字符串ABGQ')
print(test_str.zfill(5))
print(test_str.zfill(25))  # 左邊補0
 
test_str = str('+ABGQ我是個字符串ABGQ’)  # 在+之後填充0
print(test_str.zfill(25))
 
test_str = str('-ABGQ我是個字符串ABGQ’)  # 在-之後填充0
print(test_str.zfill(25))
 
輸出:
ABGQ我是個字符串ABGQ
00000000000ABGQ我是個字符串ABGQ
+0000000000ABGQ我是個字符串ABGQ
-0000000000ABGQ我是個字符串ABGQ
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章