1. 程式人生 > >python中的字元編碼

python中的字元編碼

由於Python原始碼也是一個文字檔案,所以,當你的原始碼中包含中文的時候,在儲存原始碼時,就需要務必指定儲存為UTF-8編碼。當Python直譯器讀取原始碼時,為了讓它按UTF-8編碼讀取,我們通常在檔案開頭寫上這兩行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

第一行註釋是為了告訴Linux/OS X系統,這是一個Python可執行程式,Windows系統會忽略這個註釋;

第二行註釋是為了告訴Python直譯器,按照UTF-8編碼讀取原始碼,否則,你在原始碼中寫的中文輸出可能會有亂碼。

申明瞭UTF-8編碼並不意味著你的.py檔案就是UTF-8編碼的,必須並且要確保文字編輯器正在使用UTF-8 without BOM編碼:

set-encoding-in-notepad++

如果.py檔案本身使用UTF-8編碼,並且也申明瞭# -*- coding: utf-8 -*-,開啟命令提示符測試就可以正常顯示中文:

py-chinese-test-in-cmd

格式化

最後一個常見的問題是如何輸出格式化的字串。我們經常會輸出類似'親愛的xxx你好!你xx月的話費是xx,餘額是xx'之類的字串,而xxx的內容都是根據變數變化的,所以,需要一種簡便的格式化字串的方式。

py-str-format

在Python中,採用的格式化方式和C語言是一致的,用%實現,舉例如下:

>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.'
% ('Michael', 1000000) 'Hi, Michael, you have $1000000.'

你可能猜到了,%運算子就是用來格式化字串的。在字串內部,%s表示用字串替換,%d表示用整數替換,有幾個%?佔位符,後面就跟幾個變數或者值,順序要對應好。如果只有一個%?,括號可以省略。

常見的佔位符有:

佔位符 替換內容
%d 整數
%f 浮點數
%s 字串
%x 十六進位制整數

其中,格式化整數和浮點數還可以指定是否補0和整數與小數的位數:

如果你不太確定應該用什麼,%s永遠起作用,它會把任何資料型別轉換為字串:

>>> 'Age: %s. Gender: %s' % (25
, True) 'Age: 25. Gender: True'

有些時候,字串裡面的%是一個普通字元怎麼辦?這個時候就需要轉義,用%%來表示一個%

>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'

format()

另一種格式化字串的方法是使用字串的format()方法,它會用傳入的引數依次替換字串內的佔位符{0}{1}……,不過這種方式寫起來比%要麻煩得多:

>>> 'Hello, {0}, 成績提升了 {1:.1f}%'.format('小明', 17.125)
'Hello, 小明, 成績提升了 17.1%'

補充:

字串中的某個字元的替換方法replace()方法:

a = 'abc'
b = a.replace('a','A')
print(a)
>>>abc
print(b)
>>>Abc