字符串是一種重要的數(shù)據(jù)形式,有價值的程序都會涉及到對于字符串的處理。幸運的是须教,強大的python內(nèi)置了很多函數(shù),來幫助我們解析和處理字符串斩芭。本文會涉及到字符串編碼轻腺,簡單的字符串處理函數(shù)。
字符串編碼
在 Python3 中划乖,文本總是 Unicode, 由 str 類型進行表示贬养,二進制數(shù)據(jù)使用 bytes 進行表示。不會出現(xiàn)python2種將 str 與 bytes 偷偷的混在一起的情況琴庵,使得兩者的區(qū)別更加明顯[1]误算。
我們知道仰美,計算機儲存的都是二進制信息,二進制信息有很多種編碼方式來表示字符儿礼,有的編碼方式叫BIG-5咖杂,有的編碼方式叫GBK,有的編碼方式叫UTF-8蚊夫,不一而足诉字。
在python3中,默認的編碼方式是UTF-8这橙。python內(nèi)置了可以處理字符串的decode()函數(shù)和encode()函數(shù)奏窑,decode()函數(shù)將其它編碼的字符串轉(zhuǎn)化為UTF-8导披,encode()函數(shù)將UTF-8編碼轉(zhuǎn)化為其它編碼[2]屈扎。
拼接字符串
使用+
拼接少量字符串,形式簡潔撩匕,速度很快鹰晨。比如:
>>> string_1 = "Hello"
>>> string_2 = "World"
>>> string = string_1 + string_2
>>> print(string)
HelloWorld
對于已知值的字符串,可以依次打出其值并賦值給一個字符串變量止毕,也可以實現(xiàn)字符串的連接模蜡。
# 無需加號的連接
>>> string_3 = "Hello" "World"
>>> print(string_3)
HelloWorld
隨著字符串?dāng)?shù)量的增多,字符串連接的效率會迅速降低[3]扁凛。這時就需要使用join()方法忍疾,它本質(zhì)上是一個函數(shù)。join()是專屬于字符串的一種方法谨朝,字符串后面只要加上一個點卤妒,就能夠使用該方法。
>>> parts = ['Is', 'Chicago', 'Not', 'Chicago?']
# 用空格連接
>>> ' '.join(parts)
'Is Chicago Not Chicago?'
# 用逗號連接
>>> ','.join(parts)
'Is,Chicago,Not,Chicago?'
# 不使用任何字符字币,直接連接
>>> ''.join(parts)
'IsChicagoNotChicago?'
多個需要連接的字符串则披,一般會放在列表里面。然后使用join()方法連接洗出。注意士复,在','.join(parts)
中,parts表示待連接的字符串翩活,逗號意味著:每個字符串之間用逗號連接阱洪。
拆分字符串
字符串的分割需要用到split()方法,它也是python的內(nèi)置函數(shù)菠镇,專門用于拆分字符串冗荸。函數(shù)split()只接受一個參數(shù),這個參數(shù)決定了字符串應(yīng)該在何處拆分辟犀。
>>> line = 'Is Chicago Not Chicago?'
# 用逗號分隔
>>> parts = line.split(' ')
>>> print(parts)
['Is', 'Chicago', 'Not', 'Chicago?']
# 拆分和連接是互逆的俏竞,先拆分后連接绸硕,還是原來的字符串
>>> ' '.join(line.split(' ')) == line
True
如果想在多個字符處分隔應(yīng)該怎么辦呢?聰明的你不難想到魂毁,多次使用split()方法玻佩,每次使用不同的字符。具體見下面的例子:
現(xiàn)在我們還沒有學(xué)到列表連接的方法席楚,暫且使用+
咬崔。和字符串的連接類似,用+
連接列表也會有性能問題烦秩,這時需要用到append()
方法垮斯,感興趣的同學(xué)可以查閱相關(guān)資料。
首尾字符過濾
首尾字符過濾用strip()
方法只祠,strip()
默認過濾掉空格' '
和換行`\n``兜蠕,也可以指定過濾的字符。具體可以看下面的例子:
# 默認過濾首尾空格和換行符號
>>> line = ' Hello, world! \n'
>>> line.strip()
'Hello, world!'
# 過濾掉'?'
>>> line = 'Is Chicago Not Chicago?'
>>> line.strip('?')
'Is Chicago Not Chicago'
字符的查找和替換
查找的方法是find()
抛寝,用法和上面的類似熊杨,具體用法請看下面的例子。
>>> line = 'Hello, world!\n'
>>> line.find('o')
4
123find()
方法盗舰,從字符串的開頭開始尋找目標(biāo)字符晶府,遇到第一個符合的字母就停止尋找,并返回該字符的序號钻趋。
# 根據(jù)空格和字母c川陆,拆分字符串line
>>> line = 'Is Chicago Not Chicago?'
>>> part_1 = line.split(' ')
>>> print(part_1)
['Is', 'Chicago', 'Not', 'Chicago?']
>>> part_2 = []
>>> for index in part_1:
··· part_2 = part_2 + index.split('c')
>>> print(part_2)
['Is', 'Chi', 'ago', 'Not', 'Chi', 'ago?']
替換的方法是:replace()
,基本的使用格式是:字符串.replace(參數(shù)1, 參數(shù)2)
蛮位,參數(shù)1表示要被替換的字符较沪,參數(shù)2表示替換成的字符。具體見下面的例子:
>>> line = 'Hello, world!\n'
>>> line.replace('\n', '\r')
'Hello, world!\n'
# 一次性替換全部
>>> line.replace('o', 'a')
'Hella, warld!\n'
replace()
方法不是惰性的土至,它會把所有符合條件的字符都替換成目標(biāo)字符购对。
總結(jié)
- python3默認編碼是UTF-8,其它編碼轉(zhuǎn)換成UTF-8需要使用decode()方法
- 少量拼接使用
+
陶因,大量字符串拼接需要使用join()
方法 - 拆分字符串需要使用
split()
方法骡苞,可以自定義拆分的基準(zhǔn)字符 -
strip()
可以實現(xiàn)過濾首尾的特定字符,默認過濾空格和換行 - 字符的查找和替換分別使用
find()
和replace()
方法
思考
# 根據(jù)一種字符串分隔字符只需要用split()方法
# 兩次使用split()方法也可以實現(xiàn)按兩種字符分隔字符串
# 請編寫一個函數(shù)楷扬,將任意一個字符串按任意兩個字符分隔
# 比如輸入字符串:'Hello, welcome to congge python'
# 分隔參數(shù):空格和英文逗號
# 輸出:['Hello', 'welcome', 'to', 'congge', 'python']
def my_split(string, character1, character2):
array = string.split(character1)
output = []
for i in array:
output = output + i.split(character2)
return output
參考資料
- 《Python 2與Python 3版本和編碼的對比》原文鏈接:http://www.jb51.net/article/105518.htm
- 《Python字符串的編碼與解碼》原文鏈接:http://blog.csdn.net/qq_15437667/article/details/52719297
- 《合并拼接字符串》原文鏈接:http://python3-cookbook-zh.readthedocs.io/en/latest/c02/p14_combine_and_concatenate_strings.html
掃一掃這個二維碼解幽,關(guān)注公眾號:聰哥python,獲取最新python3基礎(chǔ)教程