python之使用字串

來源:互聯網
上載者:User

標籤:substitute   python   替換字串   values   import   

3.2字串格式化使用字串格式化操作符即百分比符號%來實現

>>>format = "hello,%s.%s enough for ya?"

>>>values = (‘world‘,‘Hot‘)

>>>print format % values

hello,world.Hot enough for ya?

>>> 


格式化字串的%s部分稱為轉換說明符,它們標記了需要插入轉換值的位置.s表示值會被格式化為字串----如果不是字串,則會用str將其轉換為字串.


如果要格式化字串字串裡麵包括百分比符號,那麼必須使用%%


如果格式化實數,可以使用f說明符類型,同時提供所需要的精度

>>> format = "pi with three decimals:%.3f"

>>> from math import pi

>>> print format % pi

pi with three decimals:3.142

>>> 


string模組提供另外一種格式化值得方法:模板字串.它的工作方式類似於很多unix shell裡的變數替換.substitute這個模板方法會用傳遞進來的關鍵字參數foo替換字串中的$foo

>>> from string import Template

>>> s = Template(‘$x,glorious $x!‘)

>>> s.substitute(x=‘slurm‘)

‘slurm,glorious slurm!‘

>>> 


如果替換欄位是單詞的一部分,那麼參數名就必須用括弧起來,從而準確指明結尾:

>>> s = Template("It‘s ${x}tastic!")

>>> s.substitute(x=‘slurm‘)

"It‘s slurmtastic!"

>>> 


可以使用$$插入貨幣符號:

>>> s = Template("Make $$ selling $x!")

>>> s.substitute(x=‘slurm‘)

‘Make $ selling slurm!‘

>>> 


除了關鍵字參數之外,還可以使用字典變數提供值/名稱對:

>>> s = Template(‘A $thing must never $action.‘)

>>> d = {}

>>> d[‘thing‘] = ‘gentleman‘

>>> d[‘action‘] = ‘show his socks‘

>>> s.substitute(d)

‘A gentleman must never show his socks.‘

>>> 


3.3字串格式化:完整版

格式化操作符的右運算元可以是任何東西,如果是元組或映射類型,那麼字串格式化將會有所不同.

如果需要轉換的元組作為轉換運算式的一部分存在,那麼必須將它用圓括弧括起來,以避免出錯.

>>> ‘%s plus %s equals %s‘ % (1,1,2)

‘1 plus 1 equals 2‘

>>> 


1.%字元:標記轉換說明符的開始

2.轉換標誌:-表示靠左對齊;+表示在轉換值之前要加上加號或減號;""表示正數之前保留空格;0表示轉換值若位元不夠則用0填充

3.最小欄位寬度:轉換後的字串至少應該具有該值指定的寬度.如果是*.則寬度會從值元組中讀出.

4.點(.)後跟精度值:如果轉換的是實數,精度值就表示出現在小數點後的位元.如果轉換的是字串,那麼該數字就表示最大欄位寬度.如果是*,那麼精度將會從元組中讀出

5.轉換類型 見書  3-1 表





3-1-1簡單轉換

>>> ‘Price of eggs:$%d‘ % 42

‘Price of eggs:$42‘

>>> ‘Hexadeciaml price of eggs: %x‘ % 42

‘Hexadeciaml price of eggs: 2a‘

>>> from math import pi

>>> ‘Pi:%f...‘ % pi

‘Pi:3.141593...‘

>>> ‘Very inexact estimate of pi: %i‘ %pi

‘Very inexact estimate of pi: 3‘

>>> ‘Using str: %s‘ % 42L

‘Using str: 42‘

>>> ‘Using repr: %s‘ % 42L

‘Using repr: 42‘

>>> 



3.3.2欄位寬度和精度

轉換說明符可以包括欄位寬度和精度.欄位寬度是轉換後的值所保留的最小字元個數,精度則是結果中應該包含的小數位元,或者是轉換後的值所能包含的最大字元個數

>>> ‘%10f‘ % pi  欄位寬10

‘  3.141593‘

>>> ‘%10.2f‘ % pi 欄位寬10  精度2

‘      3.14‘

>>> ‘%.2f‘ % pi  精度2

‘3.14‘

>>> ‘%.5s‘ % ‘Guido van Rossum‘

‘Guido‘

 

可以使用* 作為欄位寬度或精度,此時數值會從元組參數中讀出:

>>> ‘%.*s‘ % (5, ‘Guido van Rossum‘)

‘Guido‘

>>> ‘%*.*s‘ % (10,5, ‘Guido van Rossum‘)

‘     Guido‘

>>> 


3.3.3符號,對其和0填充

>>> ‘%010.2f‘  % pi

‘0000003.14‘

>>> 



3-1字串格式化樣本

#!/usr/bin/env python

width = input(‘Please enter width:‘)

price_width = 10

item_width = width - price_width

header_format = ‘%-*s%*s‘

format = ‘%-*s%*.2f‘

print ‘=‘ * width

print header_format % (item_width,‘Item‘,price_width,‘Price‘)

print ‘-‘ * width

print format % (item_width,‘Apples‘,price_width,0.4)

print ‘=‘ * width


3.4字串方法

儘管字串方法完全來源於string模組,但是這個模組還包括一些不能作為字串方法使用的常量和函數.maketrans函數就是其中之一,後面會將它和translate方法一起介紹,下面是一些有用的字串常量

string.digits:包括數字0~9的字串

string.letters:包含所有字母的字串

string.lowercase:包含所有小寫字母的字串

string.printable:包含所有可列印字元的字串

string.punctuation:包含所有標點的字串

string.uppercase:包含所有大寫字母的字串


3.4.1 find

find方法可以在一個較長的字串中尋找子字串。它返回子串所在位置的最左端索引。如果沒有找到則返回-1

>>> ‘With a moo-moo here,and a moo-moo there‘.find(‘moo‘)

7

>>> title = "Monty Python‘s Flying Circus"

>>> title.find(‘Monty‘)

0

>>> title.find(‘Python‘)

6

>>> title.find(‘Flying‘)

15

>>> title.find(‘Zirquss‘)

-1

>>> 


可選的起始點和結束點參數

>>> subject = ‘$$$ Get rich now!!! $$$‘

>>> subject.find(‘$$$‘)

0

>>> subject.find(‘$$$‘,1)

20

>>> subject.find(‘!!!‘)

16

>>> subject.find(‘!!!‘,0,16)

-1

>>> 



3.4.2 join

join方法是非常重要的字串方法,它是split方法的逆方法,用來在隊列中添加元素。

>>> seq = [‘1‘,‘2‘,‘3‘,‘4‘,‘5‘]

>>> sep.join(seq)

‘1+2+3+4+5‘

>>> 


>>> dirs = ‘‘,‘usr‘,‘bin‘,‘env‘

>>> ‘/‘.join(dirs)

‘/usr/bin/env‘

>>> print ‘C:‘ + ‘\\‘.join(dirs)

C:\usr\bin\env

>>> 

需要添加的隊列元素都必須是字串。


3.4.3 lower

lower方法返回字串的小寫字母片

>>> ‘Trondheim Hammer Dance‘.lower()

‘trondheim hammer dance‘

>>> 



>>> name = ‘Gumby‘

>>> names = [‘gumby‘,‘smith‘,‘jones‘]

>>> if name.lower() in names: print ‘Found it‘

... 

Found it

>>> 


另一個string模組的capwords函數

>>> string.capwords("that‘s all,folks")

"That‘s All,folks"

>>> 


3.4.4 replace

replace方法返回某字串的所有匹配項均被替換之後得到字串

>>> ‘This is a test‘.replace(‘is‘,‘eez‘)

‘Theez eez a test‘

>>> 


3.4.5 split

這是一個非常重要的字串方法,它是join的逆方法,用來將字串分割成序列

>>> ‘1+2+3+4+5‘.split(‘+‘)

[‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘]

>>> ‘/usr/bin/env‘.split(‘/‘)

[‘‘, ‘usr‘, ‘bin‘, ‘env‘]

>>> ‘Using the default‘.split()

[‘Using‘, ‘the‘, ‘default‘]

>>> 


3.4.6 strip

返回除兩側空格的字串:

>>> ‘        inernal whitespace is kept            ‘.strip()

‘inernal whitespace is kept‘

>>> 


它和lower方法一起使用的話就可以很方便的對比輸入的和儲存的值.讓我們回到lower部分中的使用者名稱的例子,假設使用者在輸入名字時無意中在名字後面加上了空格:

>>> names = [‘gumby‘,‘smith‘,‘jones‘]

>>> name = ‘gumby ‘

>>> if name in names : print ‘Found it‘

... 

>>> if name.strip() in names: print ‘Found it‘

... 

Found it

>>> 


也可以指定需要去除的字元,將它們列為參數即可.

>>> ‘***SPAM*for*everyone!!!***‘.strip(‘*!‘)

‘SPAM*for*everyone‘

>>> 


3.4.7 translate

translate方法和replace方法一樣,可以替換字串中的某些部分,但是和前者不同的是,translate方法只處理單個字元.它的優勢在於可以同時進行多個替換,有些時候比replace效率高的多.

在使用translate轉換之前,需要先完成一張轉換表.轉換表中是以字元替換某字元的對應關係.因為這個表有多達256個項目,我們還是不要自己寫了,使用string模組裡面的maketrans函數就行.

maketrans函數接受兩個參數:兩個等長的字串,表示第一個字串中的每個字元都用第二個字串中相同位置的字元替換.

>>> from string import maketrans

>>> table = maketrans(‘cs‘,‘kz‘)

>>> len(table)

256

>>> table[97:123]

‘abkdefghijklmnopqrztuvwxyz‘    字母c和s  分別替換成kz

>>> maketrans(‘‘,‘‘)[97:123]

‘abcdefghijklmnopqrstuvwxyz‘

>>> 


建立這個表以後,可以將它用作translate方法的參數,進行字串的轉換如下:

>>> ‘this is an incredible test‘.translate(table)

‘thiz iz an inkredible tezt‘


translate的第二個參數是可選的,這個參數是用來指定需要刪除的字元.

>>> ‘this is an incredible test‘.translate(table,‘ ‘)

‘thizizaninkredibletezt‘



非英語字串的問題

有些時候類似於lower這樣的字串方法並不能如我們所願地進行工作.


本文出自 “linux_oracle” 部落格,請務必保留此出處http://pankuo.blog.51cto.com/8651697/1634648

python之使用字串

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.