xia的小窩

一起來coding和碼字吧

0%

python-Discord-bot,從0開始到做出一個機器人系列-8

字符串編碼轉換

在 python3.x 中,默認採用編碼格式為UTF-8

在 python 中,有兩種常用的字符串類型,為bytes 和 str。str(Unicode字符)、bytes(二進制數據)
str(在內存中以Unicode表示)
如果在網路上傳輸,或者保存進硬碟,就需要把 str 傳換成 bytes 類型

使用encode()函數解編碼

1
str.encode([encoding = 'utf8'][, error = 'strict'])

str : 表示要轉換的字符串
encoding=’utf8’ : 可選參數,用於指定進行轉碼時採用的字符編碼
error = ‘strict’ : 用於指定錯誤的處理方式,有ignore, replace, xmlcharrefreplace……等,strict為默認值

1
2
3
4
5
ex = "人生苦短,我愛Python"
ex = ex.encode('utf8')
print(ex)
# b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe6\x84\x9bPython'
# 使用utf-81編碼,轉換後的二進制數據

使用decode()函數解碼

二進制轉換回字符串

1
2
3
ex = b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe6\x84\x9bPython'
print(ex.decode())
# 人生苦短,我愛Python

字符串常用操作

在Python的開發過程中,很多時候都要對字符串做相應的處理,比如拼接、擷取、格式化……

拼接字符串

1
2
3
4
fir = "人生苦短"
sec = "我愛Python"
print(fir + " , " + sec)
# 人生苦短 , 我愛Python

一定要字串型態加上字串型態才可以拼起來

1
2
3
4
5
fir = "人生苦短"
sec = "我愛Python"
num = 55
print(fir + " , "+ sec + num)
# TypeError: can only concatenate str (not "int") to str

所以說,一定要轉換成相同的型態

計算字符串長度

在Python中,在默認的情況下,一個漢字佔3個字節,數字及其它基本上都佔1個字節

使用len()函數計算長度

1
2
3
str_test = "人生苦短,我愛Python"
print(str_test)
# 13

然而,在默認的情況下,使用len()函數,所有字符都認為是1字節

換成encode()函數

1
2
3
4
str_test = "人生苦短,我愛Python"
print(len(str_test.encode('utf-8')))
# 25
# 3 * 6 + 7 = 25

擷取字符串

用slice(切片)的方式

1
2
3
str_test = 'abcdefg'
print(str_test[0:3:2])
# ac

如果在超出範圍的情況下,可以用try……except IndexError解決

分割字符串

1
str.split(sep, maxsplit)

用於指定分割字符串,可以包含多個字符
可選參數,用於指定分割的次數,如果不指定或者為-1,則分割次數沒有限制,否則返回結果列表元素各數最多為maxsplit+1

1
2
3
4
5
str_test = "abc \ndefg"
str_test.split()
print(str_test)
# abc
# defg

這是考試題目最常出現的

1
2
3
4
5
# 在某些情況下,需要分開進行輸入
nums = list(map(int, input().split()))
print(nums)
# input 0 1 2 3 4 5 6 7 8 9
# output [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

合併字符串

1
str_new = string.join(iterable)

使用join進行合併

1
2
3
str_test = ["a", "b", "c"]
print("-".join(str_test))
# a-b-c

檢索字符串

使用count()函數

1
2
3
str_test = "aaaabb"
print(str_test.count("a"))
# 4

使用find()函數

1
2
3
4
# 返回首次出現的下標
str_test = "aaaabb"
print(str_test.find("b"))
# 4

使用index()函數

1
2
3
4
# 返回首次出現的下標
str_test = "aaaabb"
print(str_test.index("b"))
# 4

使用startwith()函數

1
2
3
4
# 確認開頭首字母
str_test = "abcabcabc"
print(str_test.startswith("b"))
# False

使用endswith()函數

1
2
3
4
# 確認末尾字母
str_test = "abcabcabc"
print(str_test.endswith("c"))
# True

字母大小寫轉換

使用lower()函數全部轉小寫

1
2
3
str_test = "wsdjahAKSJD"
print(str_test.lower())
# wsdjahaksjd

使用upper()函數全部轉大寫

1
2
3
str_test = "wsdjahAKSJD"
print(str_test.upper())
# WSDJAHAKSJD

去除字符串中的空格和特殊字符

可以使用strip()函數去除前後的空格
當然還有lstrip()和rstrip()……
這裡的特殊字符是指\t、\r、\n等

使用strip()函數

1
2
3
4
5
6
# 掐頭去尾
str_test = " ssd "
print(str_test)
# ssd
print(str_test.strip())
# ssd

lstrip()與rstrip()的概念一樣

1
2
3
4
5
6
7
# l => left
# r => right
str_test = " ssd "
print(str_test.lstrip())
# ssd
print(str_test.rstrip())
# ssd

格式化字符串

使用format()函數

1
2
3
# str.format(args)
print("{} {} {:.5f}".format(50, "中", 20.5555556))
#c 50 中 20.55556