# coding:utf-8python
#字符串是不可變,不可修改web
#----------------------------------------- 字符串格式化 ------------------------------------------------------------shell
#基本字符串操做api
#索引,分片,乘法,判斷成員資格,求長度,取最小值和最大值 對字符串都適用ide
#請記住字符串是不可變的。所以以下所示的項或分片賦值都是不合法的:函數
#webite = 'http://www.python.org'ui
#webite[-3:] = 'com'spa
#字符串格式化操做符unix
format = "Hello, %s, %s enough for ya?" #格式化字符串的%s部分稱爲說明符,它們標記了須要植入轉換值的位置。S表示值會被格式化,若是不是字符串,則會用str將其轉換爲字符串。orm
values = ('world', 'Hot') #一個值能夠用字符串或數字,多個值只能用元組或者字典,若是用列表只能算一個值
print format % values
#Hello, world, Hot enough for ya?
#注意:格式化字符包括百分號,請使用%%
#字符串格式化浮點數
#若是要格式化浮點數,可使用f說明轉換說明符的類型。同時提供所需的精度:一個句點再加上但願保留的小數位數。由於格式化轉換說明符老是以表示類型的字符結束,因此精度應該放在類型字符f的前面
format = "Pi with three decimals: %.3f" #f說明付的類型,.3是小數位
from math import pi #導入pi函數
print format % pi
#Pi with three decimals: 3.142
#string模塊字符串格式化方法
from string import Template #string模塊的Template模板字符串
s = Template('$x, glorious $x!') #工做方式相似不少unix shell裏的變量替換。
print s.substitute(x='slurm') #substitute模板方法傳遞關鍵字參數替換字符串中的$x
#slurm, glorious slurm!
s = Template("It's ${x}tastic!") #若是替換字段是單詞一部分,那麼參數名就必須用括號括起來
print s.substitute(x='slurm')
#It's slurmtastic!
s = Template("Make $$ selling $x!") #可使用$$插入美圓符號
print s.substitute(x='slurm')
#Make $ selling slurm!
s = Template('A $thing must nerver $action.')
d = {}
d['thing'] = 'gentlemen' #除了關鍵字參數以外,還可使用字典變量提供值
d['action'] = 'show his socks'
print s.substitute(d)
#A gentlemen must nerver show his socks.
#使用元組爲格式化字符,必須用括號
print '%s plus %s equals %s' % (1, 1, 2)
#1 plus 1 equals 2
#轉換類型
#d, i 帶符號的十進制整數
#o 不帶符號的八進制
#u 不帶符號的十進制
#x 不帶符號的十六進制(小寫)
#X 不帶符號的十六進制(大寫)
#e 科學計數法表示的浮點數(小寫)
#E 科學計數法表示的浮點數(大寫)
#f, F 十進制浮點數
#g 若是指數大於-4或者小於精度值則和e相同,其餘狀況和f相同
#G 若是指數大於-4或者小於精度值則和E相同,其餘狀況和F相同
#C 單字符(接受整數或者單字符字符串)
#r 字符串(使用repr轉換任意Python對象)
#s 字符串(使用str轉換任意Python對象)
#簡單轉換
print 'Price of eggs: $%d' % 42 # %d是帶符號的十進制整數
#Price of eggs: $42
print 'Hexadecimal price of eggs: %x' % 42 # %x是不帶符號的十六進制(小寫)
#Hexadecimal price of eggs: 2a
from math import pi
print 'Pi: %f...' % pi # %f是十進制浮點數
#Pi: 3.141593...
print 'Very inexact estimate of pi: %i' % pi # %i和%d 是同樣的
#Very inexact estimate of pi: 3
print 'Using str: %s' % 42L # %s 普通字符串
#Using str: 42
print 'Using repr: %r' % 42L # %r python字符串
#Using repr: 42L
#字段寬度和精度
#字寬度一共有多少位字符,若是寬度過長,前面用空格代替,精度對於數字來講是小數點後面保留幾位,對於字符串來講轉換後的值所能包含的最大字符個數。
from math import pi
print '%10f' % pi #字段寬度 10
# 3.141593
print '%10.2f' % pi #字段寬 10,精度 2
# 3.14
print '%.2f' % pi #精度 2
#3.14
print '%.11s' % 'Guido van Rossum' #字符串方式
#Guido van R
print '%.5s' % 'Guido van Rossum'
#Guido
print '%.*s' % (5, 'Guido van Rossum') #能夠用星號做爲字段寬和精度,數值從元組參數中讀出
#Guido
#符號,對齊和用0填充
#在字符寬度和精度值以前還能夠放置一個」標誌「,該標誌能夠是零,加號,減號或空格(就是將原來空格替換掉)。
print '%010.2f' % pi #字段寬 10 ,並用0填充
#0000003.14
print '%-10.2f' % pi #減號左對齊數值,右側多出額外空格
#3.14
print ('% 5d' % 10) + '\n' + ('% 5d' % -10) #空格意味着在正數前加上空格。這在須要對齊正負數時會頗有用。
# 10
# -10
print ('%+5d' % 10) + '\n' + ('%+5d' % -10) #加號無論是正數仍是負數都標示出符號(一樣是在對齊時頗有用)。
# +10
# -10
#------------------------------------------ 字符串方法 --------------------------------------------------------
#find
#find方法能夠在一個較長的字符串中查找子串。它返回子串所在位置的最左端索引。若是沒有找到則返回-1。
print 'With a moo-moo here, and a moo-moo there'.find('moo') #查找moo,返回所在位置最左端的索引
#7
title = "Monty Python's Flying Circus"
print title.find('Monty') #最左端索引位置0
#0
print title.find('Python') #最左端索引位置6
#6
print title.find('Flying') #最左端索引位置15
#15
print title.find('Zirquss') #沒找到顯示-1
#-1
subject = '$$$ Get rich now!!! $$$'
print subject.find('$$$') #找到$$$,返回0,證實在索引0位置找到子串
#0
print subject.find('$$$', 1) #起始點索引位置1開始查找,找到後面第二個$$$,索引位置是20
#20
print subject.find('!!!') #索引位置16找到
#16
print subject.find('!!!', 0, 16) #起始點索引爲0和結束點索引爲16範圍內查找,沒有找到
#-1
print subject.find('!!!', 0, 19) #起始點索引爲0和結束點索引爲19範圍內查找,找到
#16
#join
#split逆方法,用來鏈接序列中的元素。
#seq = [1, 2, 3, 4, 5]
#sep = '+'
#print sep.join(seq) #列表沒法join,必須都是字符串
seq = ['1', '2', '3', '4', '5']
sep = '+'
print sep.join(seq) #鏈接字符串列表
#1+2+3+4+5
dirs = '', 'usr', 'bin', 'env'
print '/'.join(dirs)
#/usr/bin/env
print 'C:' + '\\'.join(dirs)
#C:\usr\bin\env
#lower
#返回字符串的小寫字母
print 'Trondheim Hammer Dance'.lower()
#trondheim hammer dance
#用戶輸入大寫字母,能夠用來變成小寫並查找到(忽略大寫)
name = 'Gumby'
names = ['gumby', 'smith', 'jones']
if name.lower() in names: print 'Found it!'
#Found it!
#replace
#replace方法返回某字符串的全部匹配項均被替換以後獲得字符串
print 'This is a test'.replace('is', 'eez')
#Theez eez a test
#split
#join逆方法,字符串分割成序列
print '1+2+3+4+5'.split('+')
#['1', '2', '3', '4', '5']
print '/usr/bin/env'.split('/')
#['', 'usr', 'bin', 'env']
print 'Using the default'.split() #若是不提供任何分隔符,程序會把全部空格做爲分隔符(空格,製表,換行等)
#['Using', 'the', 'default']
#strip
#strip方法返回去除兩側(不包括)內部空格的字符串
print ' internal whitespace is kept '.strip()
#internal whitespace is kept
#用戶若是輸入值帶有空格。
names = ['gumby', 'smith', 'jones']
name = 'gumby '
if name in names: print 'Found it!' #這樣匹配不到
if name.strip() in names: print 'Found it!' #能夠匹配
#Found it!
#也能夠指定須要去除的字符串,將它們列爲參數便可。
print '*** SPAM * for * everyone!!! ***'.strip(' *!') #這個方法只會去除兩側字符,因此字符串中的星號沒有被去掉
#SPAM * for * everyone
#translate
#和replace同樣替換,但translate只替換單個字符,能夠同時進行多個替換。
from string import maketrans
table = maketrans('cs', 'kz') #將模板maketrans裏面的c替換k,s替換成z
print len(table) #多少字符串
#256
print table[97:123]
#abkdefghijklmnopqrztuvwxyz
print maketrans('', '')[97:123]
#abcdefghijklmnopqrstuvwxyz
#涉及的函數
#string.capwords(s[, sep]) 使用split函數分割字符串s(以sep爲分隔符),使用capitalize函數將分割獲得的各單詞首字母大寫,而且使用join函數以sep爲分隔符將各單詞鏈接起來
#string.maketrans(from, to) 建立用於轉換的轉換表。