[Python3] 011 字串:給你們看看我的內建方法 第三彈
目錄
少廢話,上例子
1. encode(encoding='utf-8', errors='strict')
- 釋義:
- 使用
encoding
指定的編碼格式對字串進行編碼,預設為utf-8
,不區分大小寫 errors
用於設定不同錯誤的處理方案,預設為 'strict',意為編碼錯誤引起一個UnicodeErrorerrors
其他可能的值有:'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace'
以及通過codecs.register_error()
- 直接看例子吧
- 使用
- 示例
# 例1 str1 = "YorkFish不是魚" str_utf8 = str1.encode("UTF-8") str_gbk = str1.encode("GBK") print("編碼前: ", str1, end="\n\n") # 設定 print 結尾為兩個回車,方便閱讀 print("UTF-8 編碼:", str_utf8) print("GBK 編碼:", str_gbk, end="\n\n") print("utf-8 預設解碼:", str_utf8.decode()) # 預設 encoding='utf-8',errors='strict' print("utf-8 解碼:", str_utf8.decode('utf-8','strict')) # utf-8 不區分大小寫 print("UTF-8 解碼:", str_utf8.decode('UTF-8','strict')) print("GBK 解碼:", str_gbk.decode('GBK','strict')) # gbk 也不區分大小寫
- 執行結果
編碼前: YorkFish不是魚
UTF-8 編碼: b'YorkFish\xe4\xb8\x8d\xe6\x98\xaf\xe9\xb1\xbc'
GBK 編碼: b'YorkFish\xb2\xbb\xca\xc7\xd3\xe3'
utf-8 預設解碼: YorkFish不是魚
utf-8 解碼: YorkFish不是魚
UTF-8 解碼: YorkFish不是魚
GBK 解碼: YorkFish不是魚
- 不直觀?來張截圖:
2. expandtabs([tabsize=8])
- 釋義:
- 將字串中的
Tab
符號,即\t
,轉換為空格 - 如果不指定引數,預設空格數是 8
- 將字串中的
- 示例
# 例2
str2 = "製表符攻擊:\t!!!"
print ("替換 \\t 符號前: " + str2)
print ("替換 \\t 符號後: " + str2.expandtabs())
print ("用 16 個空格替換 \\t 符號: " + str2.expandtabs(16))
- 執行結果
替換 \t 符號前: 製表符攻擊: !!!
替換 \t 符號後: 製表符攻擊: !!!
用 16 個空格替換 \t 符號: 製表符攻擊: !!!
- 不直觀?來張截圖:
藉此機會簡單地說一說 print()
- 更完整的寫法:print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
- 預設情況下,將值列印到流或 sys.stdout
- 可選關鍵字引數:
- file:類似於檔案的物件(流);預設為當前的
sys.stdout
- sep:在值之間插入的字串,預設為空格
- end:在最後一個值後追加的字串,預設為換行符
- flush:
whether to forcibly flush the stream
是否強制重新整理資料流? file
和flush
是要挖坑的節奏,待我學完來填平,編碼Py011-1
- file:類似於檔案的物件(流);預設為當前的
- 示例
# print()
name = "YorkFish"
print(name + name)
print(name, name) # 注意輸出時有空格
print(name, name, sep='') # sep 設定為不空格
print() # 輸出一次換行符
print(name, end='\n\n') # windows 下輸出兩次換行符
print(name, end=' --- ') # 意味著不換行
print(name)
- 執行結果
YorkFishYorkFish
YorkFish YorkFish
YorkFishYorkFish
YorkFish --- YorkFish
- 不直觀?來張截圖:
3. format_map()
- 釋義:使用對映中的替換返回 S 的格式化版本
- 示例
# 例3 沒學到,只好從官方文件中找了個例子
class Default(dict):
def __missing__(self, key):
return key
print('{name} was born in {country}'.format_map(Default(name='Guido')))
- 執行結果
Guido was born in country
- 挖個坑,日後填平,編號
Py011-2
4. replace(old, new[, count])
- 釋義:
- 將字串中的
old
子字串替換成new
子字串 - 如果
count
指定,則替換不超過count
次
- 將字串中的
- 示例
# 例4
str4 = "All things in their being are good for something."
print(str4.replace('i', 'I'))
print(str4.replace('i', 'I', 3))
- 執行結果
All thIngs In theIr beIng are good for somethIng.
All thIngs In theIr being are good for something.
5. split(step=None, maxsplit=-1)
- 釋義:
- 返回字串中的單詞列表,使用
sep
作為分隔符字串 - 不帶引數預設以空格為分隔符切片字串
- 如果
maxsplit
引數有設定,則僅分隔maxsplit
個子字串,返回切片後的子字串拼接的列表
- 返回字串中的單詞列表,使用
- 示例
# 例5
name5_1 = "Y.o.r.k.F.i.s.h"
name5_2 = "Y.o.r.k.F.i.s.h.."
print(name5_1.split('.'))
print(name5_1.split('.',maxsplit=4))
print(name5_2.split('.')) # . 前的空字元算一個;. 後也算一個
- 執行結果
['Y', 'o', 'r', 'k', 'F', 'i', 's', 'h']
['Y', 'o', 'r', 'k', 'F.i.s.h']
['Y', 'o', 'r', 'k', 'F', 'i', 's', 'h', '', '']
- 親兄弟:
rsplit(sep=None, maxsplit=-1)
- 類似於
split(step=None, maxsplit=-1)
,不過是從右邊開始分隔
- 類似於
6. splitlines([keepends])
- 釋義:
- 按照
\n
分隔,返回一個包含各行作為元素的列表 - 如果
keepends
引數指定,則返回前keepends
行
- 按照
- 示例
# 例6.1
str6 = "Cease to struggle \nand you cease to live.\n(Thomas Carlyle)"
print(str6.splitlines()) # 拆分後去掉換行符
print(str6.splitlines(True)) # 若 keepends 為 True,保留換行符
- 執行結果
['Cease to struggle ', 'and you cease to live.', '(Thomas Carlyle)']
['Cease to struggle \n', 'and you cease to live.\n', '(Thomas Carlyle)']
- splitlines() 與 split() 的區別
# 例6.2
print(''.splitlines())
print(''.split('\n')) # 注意兩者的區別
print("love at first sight.\n".splitlines())
print("love at first sight.\n".split('\n'))
- 執行結果
[]
['']
['love at first sight.']
['love at first sight.', '']
7. startswith(prefix[, start[, end]])
- 釋義:
- 檢查字串是否以指定字首
prefix
開頭,prefix
只是代號,可以是任意字串 - 如果是則返回 True,否則返回 False
start
、end
與之前樣,可指定開頭或指定區域
- 檢查字串是否以指定字首
- 示例
# 例7
str7 = "The best is yet to come."
print (str7.startswith('The'))
print (str7.startswith('is', 9))
print (str7.startswith('best', 4, 7)) # 和 endswith() 有些像,區域要大於指定字元長度
print (str7.startswith('best', 4, 8))
- 執行結果
True
True
False
True
- 表兄弟:
endswith(sub[, start[, end]])
見 第一彈
8. swapcase()
- 釋義:翻轉字串中的大小寫
- 示例
# 例8
name8 = "YorkFish"
print(name8.swapcase())
- 執行結果
yORKfISH
9. title()
- 釋義:
- 返回“標題化”的字串
- 標題化:所有的單詞都是以大寫開始,其餘字母均小寫
- 示例
# 例9
str9 = "the great gatsby"
print(str9.title())
- 執行結果
The Great Gatsby
10. zfill(width)
- 釋義:
- 返回長度為
width
的字串 - 原字串右對齊
- 若
width
大於字串長度,前邊用 0 填充
- 返回長度為
- 示例
# 例10
name10 = "YorkFish"
print(name10.zfill(5))
print(name10.zfill(20))
print(name10.zfill())
- 執行結果
YorkFish
000000000000YorkFish
TypeError……zfill() takes exactly one argument (0 given)
報錯是因為沒有輸入 width
引數。
別的也是:若方法的小括號中有引數,並且 1. 沒有用中括號括起來,2. 沒有預設值,都需要填上。
(元氣大傷!)