1. 程式人生 > >python教程(六)·字符串

python教程(六)·字符串

順序 字符串分割 blog 位數 來看 百分號 學習 like abc

我們已經學習了字符串的使用方法,我們還學習了使用索引和分片操作字符串,經歷了這麽長的時間,相信大家也有所掌握;本節將討論並學習字符串的格式化與字符串的常用方法

字符串格式化

字符串是序列的一種,所以所有的通用序列操作當然都適用啦,這裏就不再重復了,下面我們來探討字符串的格式化

何為字符串格式化?字符串格式化就是指把數據按照一定的格式組成一個字符串,這貌似很難說清楚,下面來看個例子:

現有下列變量:

year = 2018
month = 3
day = 9

我們要輸出格式為“年|月|日”的字符串,那麽我們可以使用加號+來進行拼接字符串:

output = str(year) + '|' + str(month) + '|' + str(day)
print(output)

我們將year、month、day三個變量按照一定的格式組成了一個字符串,這樣的過程就可以稱為字符串格式化。

然而,今天我們來探討的不是以這種拼接方式實現的字符串格式化,而是以用數據填充模板的方式來實現,也就是我們給出一個模板“年|月|日”,我們只需要提供三個值,年、月、日,然後就生成我們想要的字符串。

python支持的字符串格式方式有兩種,下面來一一介紹

傳統方式

第一種字符串格式化使用百分號%來實現,在%的左邊是格式化字符串,也就是我們的模板,右邊是我們用來格式化的數據(元組類型),也就是用來填充的值,舉例如下:

>>> year = 2018
>>> month = 3
>>> day = 9
>>> output = '%s|%s|%s' % (year, month, day)
>>> print(output)
2018|3|9
>>> 

模板字符串中的%s叫做轉換說明符,也叫占位符,就是用來占著位置,等待被替換成提供的值,s表示這個位置將替換成字符串,如果值不是字符串,就使用str函數轉換成字符串,完整的轉換說明符,由以下部分按順序組成:

  1. %字符:這是轉換說明符的開始
  2. 轉換標誌(可選):-表示左對齊,+表示在數值前加上正負號,空格表示正數之前保留空格,0表示轉換值後位數不足就用0填充
  3. 最小字段寬度(可選):轉換後的值不能短於該值指定的寬度,如果該位置寫的是*,則寬度由%右邊的元組提供
  4. .後跟精度值(可選):如果轉換的是浮點數,精度值就表示小數點後的位數,如果轉換的是字符串,精度值就表示最大的字段寬度,如果為*,那麽該值由%右邊的元組提供
  5. 轉換類型:看下表:
轉換類型 含義 例子
d或i 有符號的十進制整數 ‘%d‘ % 123 => ‘123‘
o 無符號的八進制整數 ‘%o‘ % 8 => ‘10‘
u 無符號十進制整數 ‘%u‘ % 123 => ‘123‘
x 無符號十六進制整數(小寫) ‘%x‘ % 123 => ‘7b‘
X 無符號十六進制整數(大寫) ‘%x‘ % 123 => ‘7B‘
e 科學計數法表示的浮點數(小寫) ‘%e‘ % 123.456 => ‘1.234560e+02‘
E 科學計數法表示的浮點數(小寫) ‘%E‘ % 123.456 => ‘1.234560E+02‘
f,F 十進制浮點數 ‘%f‘ % 123.456 => ‘123.456000‘‘%F‘ % 123.456 => ‘123.456000‘
g 如果指數大於-4或者小於精度值則和e相同,其它情況與f相同
G 如果指數大於-4或者小於精度值則和E相同,其它情況與F相同
c 單字符串(ASCII碼值或則單字符字符串) ‘%c‘ % 65 => ‘A‘‘%c‘ % ‘a‘ => ‘a‘
r 字符串(使用repr函數轉換任意python對象) ‘hello %r!‘ % ‘world‘ => "hello ‘world‘!"
s 字符串(使用str函數轉換任意python對象 ‘hello %s!‘ % ‘world‘ => ‘hello world!‘

看到這個表相信大家都暈了,告訴大家一個秘密,我從來沒有記住這個表!⊙▽⊙

因為一般來說,大多數的值都是可以轉換成字符串的,所以最常用的轉換說明符也就一個%s(~ ̄▽ ̄)~

雖然不需要記住那麽多的轉換類型,但有些細節還是要記住的!

字段寬度和精度

字段寬度是轉換後的值所占的最少字符個數,精度就是轉換後的小數位數(對於浮點數),或者轉換後最大字符個數(對於字符串),這兩個參數都是整數或者星號*,它們之間用點.分隔(如果只指定寬度不指定精度就不必要使用點.),舉例如下:

>>> '%9f' % 1.0 # 字段寬度為9
' 1.000000'
>>> '%9.1f' % 1.0 # 字段寬度為9精度為1
'      1.0'
>>> '%.2f' % 1.1 # 精度為2
'1.10'

可以看到,轉換後的字符串寬度不足時,默認在左邊用空格填充

使用星號*的時候,需提供相應的寬度或精度:

>>> '%.*s' % (5, 'hello world!')  # 精度為5
'hello'

標誌

緊接著%,我們可以使用一個標誌,這個標誌可以是0+-或者空格

  • 0表示數字的填充符使用0:
    python >>> ‘%09f‘ % 1.0 ‘01.000000‘
  • +表示給數值加上正負號:
    python >>> ‘%+d‘ % 12 ‘+12‘ >>> ‘%+d‘ % -12 ‘-12‘
  • -表示左對齊數值:
    python >>> ‘%-9f‘ % 1.0 ‘1.000000 ‘
  • 空格表示在正數前加上空格:
    python >>> ‘% d‘ % 12 ‘ 12‘ >>> ‘% d‘ % -12 ‘-12‘

補充%%表示百分號%本身

學過C語言的都知道,這種傳統的字符串格式化方式和C語言的字符串格式化方式大同小異,但是這種方式正逐漸被python拋棄,python官方推薦下面這種新的字符串格式化方式

更先進的方式

python的字符串有一個format方法,這個方法正是使用新版字符串格式化的渠道,下面是用法:

基本用法:使用{}做占位符,按順序填充參數:

>>> 'hello {}, I am {}'.format('world', 'Lee')
'hello world, I am Lee'

使用數字指定參數的位置(從0開始):

>>> 'Between {0} and {1}, I like {0}'.format('apple', 'banana')
'Between apple and banana, I like apple'

使用關鍵字參數指定參數:

>>> 'I am {name}, and my age is {age}.'.format(name='Lee', age=18)
'I am Lee, and my age is 18.'
>>> d = {'name': 'Lee', 'age': 18}  # 使用字典
>>> 'I am {name}, and my age is {age}.'.format(**d)  # 展開字典
'I am Lee, and my age is 18.'

還可以通過列表索引來指定參數:

>>> lst = ['Lee', 18]
>>> 'I am {0[0]}, and my age is {0[1]}.'.format(lst)
'I am Lee, and my age is 18.'

花括號{}中使用冒號:分隔,左邊指定字段名(數字,關鍵字等),右邊按順序指定:

  1. 填充字符:用於填充的字符,默認為空格
  2. 對齊方式
    • ^ 居中
    • < 左對齊
    • > 右對齊
  3. 正負號
    • + 給數字加上正負號
    • - 只給負數加上負號(默認)
    • 空格 給正數加上空格
  4. 寬度:指定最小字段寬度,以0開始表示用0填充
  5. 精度:在寬度字段後添加一個點.再寫此字段,表示小數點後的位數(對於浮點數),或者最大字段寬度(對於字符串)
  6. 轉換類型:大致與傳統方式相同

補充:兩個{表示{本身,兩個}表示}本身。

讀者可以參照這篇文章,寫得比較詳細:Python 中 str.format() 方法詳解


字符串方法

了解了這麽多的字符串格式化方式,該介紹幾個字符串常用方法了。

要記住字符串是不可變的,所以下面介紹到的方法都不會改變原來的字符串!

find

find方法用於在一個字符串中查找一個子串,返回第一個匹配字串的首字符索引,如果沒有找到就返回-1,舉例如下:

>>> 'hello Lee'.find('Lee')
6
>>> 'hello Lee'.find('jack')
-1

還可以指定查找的起點、終點(不包含):

>>> s = 'hello Lee'
>>> s.find('Lee', 7)  # 指定起點
-1
>>> s.find('Lee', 0, 9)  # 指定起點和終點
6

replace

replace方法用於返回替換後的字符串,如:

>>> 'hello world!'.replace('world', 'Lee')  # 用'Lee'替換'world'
'hello Lee!'

translate

和replace方法類似,但是可以同時替換多個字符,用法如下:

>>> table = str.maketrans('hw', 'HW') # 制作映射表,h=>H,w=>W
>>> table
{104: 72, 119: 87}
>>> 'hello world'.translate(table)
'Hello World'

strip

該方法用於去除兩側指定的字符串(默認為空白符,即空格、制表符、換行符等),如:

>>> ' hello world     '.strip()
'hello world'
>>> '**hello world***'.strip('*')
'hello world'

補充:lstrip只作用於字符串左端,rstrip只作用於字符串右端

split和join

split方法用來講字符串分割成序列,如:

>>> s = 'Guangdong, Zhejiang, Shanghai'
>>> s.split(',')  # 用逗號','作為分割符
['Guangdong', ' Zhejiang', ' Shanghai']
>>> s.split()  # 默認使用空白符(空格、制表符、換行符等)作為分割符
['Guangdong,', 'Zhejiang,', 'Shanghai']
>>> s.split(',', 1)  # 分割1次  
['Guangdong', ' Zhejiang, Shanghai']

補充:rsplit從右邊開始分割

join用於將序列連接成字符串,如:

>>> ','.join(['hello', 'world'])
'hello,world'

lower和upper

lower方法和upper方法分別返回轉換成小寫和大寫的字符串,如:

>>> 'AbcD'.lower()
'abcd'
>>> 'AbcD'.upper()
'ABCD'

本節內容較多,好好消化吧!

不知道下一次有時間更新又是什麽時候咯 ヾ( ̄▽ ̄)Bye~Bye~

python教程(六)·字符串