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


分享到:


相關文章: