本節(jié)摘要:字符編碼;輸出格式化
Daily Record:每天一紀(jì)念,記錄下python的學(xué)習(xí)歷程,入門學(xué)習(xí)筆記與心得。本學(xué)習(xí)筆記主要基于廖雪峰大大的Python教程。不積跬步,無以至千里~ .?(? ??_??)?
文章目錄
- 字符編碼
- 輸出格式化
字符編碼
計(jì)算機(jī)以二進(jìn)制儲(chǔ)存和處理各類數(shù)據(jù),美國(guó)人發(fā)明了計(jì)算機(jī),因而他把127個(gè)字符編碼到計(jì)算機(jī)中,包括英文字母、數(shù)字和一些符號(hào),每個(gè)字符有對(duì)應(yīng)的編碼,這個(gè)編碼表就是ASCII編碼。
然而時(shí)間上的語言多種多樣,其他語言只用一個(gè)字節(jié)處理顯然是不夠的,因而各個(gè)國(guó)家制定了各自的編碼,中國(guó)制定了GB2312編碼,用來把中文編進(jìn)去,日本把日文編到Shift_JIS里,韓國(guó)把韓文編到Euc-kr里。由于各國(guó)的標(biāo)準(zhǔn)不同,編碼中必然會(huì)出現(xiàn)沖突,多語言混合的文本中可能就會(huì)出現(xiàn)亂碼。為了解決亂碼的出現(xiàn),Unicode應(yīng)運(yùn)而生,它把所有語言都統(tǒng)一到一套編碼里,避免出現(xiàn)亂碼。相比ASCII編碼的一個(gè)字節(jié),Unicode通常是用兩個(gè)字節(jié)表示一個(gè)字符,極其偏僻的可能會(huì)用到4個(gè)字節(jié)。
| 編碼 | 區(qū)別 |
|---|---|
| ASCII編碼 | 1個(gè)字節(jié) |
| Unicode編碼 | 2個(gè)字節(jié) |
為了節(jié)約存儲(chǔ)空間,而后又發(fā)展出了一種可自動(dòng)調(diào)整字節(jié)數(shù)的UTF-8編碼。以下是三種編碼的比較。
| 字符 | ASCII | Unicode | UTF-8 |
|---|---|---|---|
| A | 01000001 | 00000000 01000001 | 01000001 |
| 中 | x | 01001110 00101101 | 11100100 10111000 10101101 |
計(jì)算機(jī)系統(tǒng)通用的字符編碼工作方式:
在計(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保存到文件:
Python的字符串
Python提供了ord()和chr()函數(shù),可以把字母和對(duì)應(yīng)的數(shù)字相互轉(zhuǎn)換:
>>> ord('C') #ord()函數(shù)獲取字母的整數(shù)表示
67
>>> chr(67) #chr()函數(shù)把整數(shù)轉(zhuǎn)化成對(duì)應(yīng)字母
C
>>> b'ABC' #用b''或""表示bytes類型的數(shù)據(jù)
>>> b'ABC'.decode('ascii') #用.decode()可以把bytes轉(zhuǎn)化為str
ABC
>>> 'ABC'.encode('ascii') #用.encode()可以把str轉(zhuǎn)化為bytes
b'ABC'
>>> len('中文') #讀取字符長(zhǎng)度
2
>>> len('中文'.encode('utf-8')) #讀取字節(jié)長(zhǎng)度
6
輸出格式化
日常生活中常會(huì)輸出類似'親愛的xxx你好!你xx月的話費(fèi)是xx,余額是xx'之類的字符串,而xxx的內(nèi)容都是根據(jù)變量變化的,所以,需要一種簡(jiǎn)便的格式化字符串的方式。
在Python中,用%實(shí)現(xiàn),舉例如下:
>>> 'hello, %s' % ‘world’
‘hello, world'
>>> 'Hi, %s, you have $%d.' % ('Lareina', 100000)
'Hi, Lareina, you have $100000.'
常見的占位符
| 常見的占位符 | 代表 |
|---|---|
| %s | 字符串 |
| %d | 整數(shù) |
| %f | 浮點(diǎn)數(shù) |
| %x | 十六進(jìn)制整數(shù) |
有幾個(gè)%?占位符,后面就跟幾個(gè)變量或者值,順序要對(duì)應(yīng)好。如果只有一個(gè)%?,括號(hào)可以省略。
其中,格式化整數(shù)和浮點(diǎn)數(shù)還可以指定是否補(bǔ)0和整數(shù)與小數(shù)的位數(shù):
>>> '%2d-%02d' % (3,1)
' 3-01'
>>> '$.2f' % 3.1415926
'3.14'
如果你不太確定應(yīng)該用什么,%s永遠(yuǎn)起作用,它會(huì)把任何數(shù)據(jù)類型轉(zhuǎn)換為字符串:
>>> 'Age: %s. Gender: %s' % (25, False)
'Age: 25. Gender: False'
對(duì)于Unicode字符串,用法完全一樣,但最好確保替換的字符串也是Unicode字符串:
>>> u'Hi, %s' % u'Lareina'
>'Hi, Lareina'
有些時(shí)候,字符串里面的%是一個(gè)普通字符怎么辦?這個(gè)時(shí)候就需要轉(zhuǎn)義,用%%來表示一個(gè)%:
>>> 'growth rate: %d %%' % 8
'growth rate: 8 %'
>>>print('%5d' % 333) #向左保留5位占位符
333
>>>print('%05d' % 333) #向左保留5位占位符并補(bǔ)0
00333
>>>print('%.2f' % 3.1415926) #四舍五入保留兩位小數(shù)
3.14
Python中的除法
>>>print(5/3) #一般除法
1.6666666666666667
>>>print(5//3) #地板除
1
>>>print(5%3) #取余數(shù)
2