Python學(xué)習(xí)日記-字符串

本章目錄

  • Part One:字符編碼
  • Part Two:字符串
  • Part Three:字符串格式化

字符串可以說(shuō)是所有變成語(yǔ)言中應(yīng)用最廣泛的數(shù)據(jù)類型,Python也不例外部翘。而處理字符串,首先需要注意的就是編碼問(wèn)題本今。

字符編碼

計(jì)算機(jī)的本質(zhì)其實(shí)就是由0和1組成的纱耻,所以說(shuō)無(wú)論是中文還是英文字符串领突,最終都要轉(zhuǎn)換為數(shù)字荐健。
最早只有127個(gè)字符被編碼到計(jì)算機(jī)里酱畅,也就是大小寫英文字母、數(shù)字和一些符號(hào)江场,這個(gè)編碼表被稱為ASCII編碼纺酸。
但是要處理中文顯然一個(gè)字節(jié)是不夠的,至少需要兩個(gè)字節(jié)址否,而且還不能和ASCII編碼沖突餐蔬,所以,中國(guó)制定了GB2312編碼佑附,用來(lái)把中文編進(jìn)去樊诺。
后來(lái)呢,為了處理更多的語(yǔ)言音同,Unicode應(yīng)運(yùn)而生啄骇。Unicode把所有語(yǔ)言都統(tǒng)一到一套編碼里,這樣就不會(huì)再有亂碼問(wèn)題了瘟斜。
Python2.x系列就是用的ASCII編碼,而Python3.x就開(kāi)始使用unicode了痪寻,這樣中文顯示問(wèn)題就有了很大的改善填物。這里打印了一下windows下Python3.6的各種編碼:


Python編碼.png

可以看到娶桦,基本統(tǒng)一為了utf-8。那么什么是utf-8呢?utf-8其實(shí)是一個(gè)可變長(zhǎng)編碼啦逆。它把一個(gè)Unicode字符根據(jù)不同的數(shù)字大小編碼成1-6個(gè)字節(jié),常用的英文字母被編碼成1個(gè)字節(jié)齐媒,漢字通常是3個(gè)字節(jié)巷帝,只有很生僻的字符才會(huì)被編碼成4-6個(gè)字節(jié)。如果你要傳輸?shù)奈谋景罅坑⑽淖址新拢肬TF-8編碼就能節(jié)省空間:

字符 ASCII Unicode UTF-8
A 01000001 00000000 01000001 01000001
x 01001110 00101101 11100100 10111000 10101101

從上面的表格還可以發(fā)現(xiàn)谱邪,UTF-8編碼有一個(gè)額外的好處,就是ASCII編碼實(shí)際上可以被看成是UTF-8編碼的一部分庶诡,所以惦银,大量只支持ASCII編碼的歷史遺留軟件可以在UTF-8編碼下繼續(xù)工作。
在計(jì)算機(jī)內(nèi)存中,統(tǒng)一使用Unicode編碼扯俱,當(dāng)需要保存到硬盤或者需要傳輸?shù)臅r(shí)候书蚪,就轉(zhuǎn)換為UTF-8編碼。
用記事本編輯的時(shí)候迅栅,從文件讀取的UTF-8字符被轉(zhuǎn)換為Unicode字符到內(nèi)存里殊校,編輯完成后,保存的時(shí)候再把Unicode轉(zhuǎn)換為UTF-8保存到文件:


image.png

字符串

字符串就是用單引號(hào)(')或者雙引號(hào)("")包裹起來(lái)的文字读存,在Python風(fēng)格規(guī)范里推薦一個(gè)模塊使用一種符號(hào)作為字符串表示为流。在字符串內(nèi)可以使用另外一種引號(hào), 以避免在字符串中使用。
例如:

print('Why are you hiding your eyes?')
print("I'm scared of lint errors.")
print('"Good!" thought a happy Python reviewer.')

結(jié)果為:


String.png

所以說(shuō)宪萄,除非想在字符串內(nèi)包含單引號(hào)或者雙引號(hào)艺谆,每一個(gè)Python文件最好使用同一種符號(hào)。
對(duì)于單個(gè)字符的編碼拜英,Python提供了ord()函數(shù)獲取字符的整數(shù)表示静汤,chr()函數(shù)把編碼轉(zhuǎn)換為對(duì)應(yīng)的字符:


ord和chr.png

如果知道字符的整數(shù)編碼,還可以用十六進(jìn)制這么寫str(unicode方式):
uniode中文.png

如果要在網(wǎng)絡(luò)上傳輸居凶,或者保存到磁盤上虫给,就需要把str變?yōu)橐宰止?jié)為單位的bytes。Python對(duì)bytes類型的數(shù)據(jù)用帶b前綴的單引號(hào)或雙引號(hào)表示:

var = b"ABC"

要注意區(qū)分'ABC'和b'ABC'侠碧,前者是str抹估,后者雖然內(nèi)容顯示得和前者一樣,但bytes的每個(gè)字符都只占用一個(gè)字節(jié)弄兜。
以Unicode表示的str通過(guò)encode()方法可以編碼為指定的bytes药蜻,例如:


encode.png

純英文的str可以用ASCII編碼為bytes,內(nèi)容是一樣的替饿,含有中文的str可以用UTF-8編碼為bytes语泽。含有中文的str無(wú)法用ASCII編碼,因?yàn)橹形木幋a的范圍超過(guò)了ASCII編碼的范圍视卢,Python會(huì)報(bào)錯(cuò)踱卵。
反過(guò)來(lái),從bytes到str可以用decode方法据过,原理和操作都是一樣的惋砂,不再贅述了。
最后绳锅,可以看下len方法西饵,len是length的縮寫,翻譯過(guò)來(lái)就是計(jì)算str或者bytes的字符字節(jié)數(shù)榨呆,例如:


len.png

可見(jiàn)罗标,1個(gè)中文字符經(jīng)過(guò)UTF-8編碼后通常會(huì)占用3個(gè)字節(jié)庸队,而1個(gè)英文字符只占用1個(gè)字節(jié)。
在操作字符串時(shí)闯割,我們經(jīng)常遇到str和bytes的互相轉(zhuǎn)換彻消。為了避免亂碼問(wèn)題,應(yīng)當(dāng)始終堅(jiān)持使用UTF-8編碼對(duì)str和bytes進(jìn)行轉(zhuǎn)換宙拉。
還有其它一些常用的方法宾尚,如spli(分割), join(拼接)谢澈,replace(替換)煌贴,upper(大寫),lower(小寫)锥忿,strip(去除兩端空格)牛郑,lstrip(去除左端空格),rstrip(去除右端空格)等敬鬓,用法都比較簡(jiǎn)單淹朋,可參考源碼調(diào)用即可。

字符串格式化

  1. 字符串格式化就是在指定位置先放一個(gè)占位符钉答,然后用變量來(lái)替換础芍,這樣就可以以相同的格式輸出不同的內(nèi)容。
    最簡(jiǎn)單的案例如下圖所示:


    字符串格式化.png

    其中数尿,占位符常用的有:

占位符 替換內(nèi)容
%d 整數(shù)
%f 浮點(diǎn)數(shù)
%s 字符串
%x 十六進(jìn)制整數(shù)

還有很多其它占位符仑性,不太常用,需要的時(shí)候再去查就好了右蹦。
另外诊杆,如果不確定,可以使用字符串占位符何陆,因?yàn)槠渌愋投嫁D(zhuǎn)化為字符串刽辙。

  1. 有種說(shuō)法是%號(hào)的方式已經(jīng)過(guò)時(shí)了,用format方法來(lái)操作字符串格式化更合適甲献。
    相對(duì)來(lái)說(shuō),個(gè)人還是喜歡format形式多一些颂翼,感覺(jué)更規(guī)范晃洒。
    format形式的基礎(chǔ)用法就是用{0},{1}...來(lái)代替站位符朦乏,如果用{}代表使用默認(rèn)順序球及,例如:


    format格式化.png

    另外,還有一些比較詳細(xì)的用法:


    format格式化進(jìn)階.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呻疹,一起剝皮案震驚了整個(gè)濱河市吃引,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖镊尺,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朦佩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡庐氮,警方通過(guò)查閱死者的電腦和手機(jī)语稠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)弄砍,“玉大人仙畦,你說(shuō)我怎么就攤上這事∫羯簦” “怎么了慨畸?”我有些...
    開(kāi)封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)衣式。 經(jīng)常有香客問(wèn)我寸士,道長(zhǎng),這世上最難降的妖魔是什么瞳收? 我笑而不...
    開(kāi)封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任碉京,我火速辦了婚禮,結(jié)果婚禮上螟深,老公的妹妹穿的比我還像新娘谐宙。我一直安慰自己,他們只是感情好界弧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布凡蜻。 她就那樣靜靜地躺著,像睡著了一般垢箕。 火紅的嫁衣襯著肌膚如雪划栓。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天条获,我揣著相機(jī)與錄音忠荞,去河邊找鬼。 笑死帅掘,一個(gè)胖子當(dāng)著我的面吹牛委煤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播修档,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼碧绞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了吱窝?” 一聲冷哼從身側(cè)響起讥邻,我...
    開(kāi)封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤迫靖,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后兴使,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體系宜,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年鲫惶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜈首。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡欠母,死狀恐怖欢策,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赏淌,我是刑警寧澤踩寇,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站六水,受9級(jí)特大地震影響俺孙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掷贾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一睛榄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧想帅,春花似錦场靴、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至浅缸,卻和暖如春轨帜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衩椒。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工蚌父, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毛萌。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓梢什,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親朝聋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容