<<Python基礎教程>>學習筆記 | 第03章 | 字串,python第03章
第03章: 使用字串
------
支援的操作
- 索引
- 切片
- 增加元素
- 刪除元素
- 更新元素
- 尋找元素(檢查某個元素是否是序列中的一員)
- 序列長度
- 最大值
- 最小值
- 其他內建函數
>>> website='http://www.python.org'>>> website[-3:]='com' #此操作不合法,因為字串是不變,不能做修改Traceback (most recent call last): File "<pyshell#162>", line 1, in <module> website[-3:]='com'TypeError: 'str' object does not support item assignment
------
字串格式化:
%s:轉換說明符 元祖
#字元型>>> str1 = "Hello, %s. %s enough for you ya?">>> val1 = ('Jerry','Hot')>>> print str1 % val1Hello, Jerry. Hot enough for you ya?#浮點型>>> format = "PI with three decimals: %.3f">>> from math import pi>>> print format % piPI with three decimals: 3.142Note: 1. 使用列表的話,序列會理解成一個值,只有元祖和字典可以格式化一個以上的值2. 百分比符號: %%模板字串#類似於linux中的變數替換,Template,substitute(將傳的參數進行轉換)>>> s = Template('$x,glorious $x!')>>> s.substitute(x='slurm')'slurm,glorious slurm!'#如果是單詞的一部分的話,用{}括起來>>> s = Template('I love ${x}rry!')>>> s.substitute(x='She')'I love Sherry!'#如果是美元, 注意用$$來表示美元符,safe_substitute不會因缺少值或美元符而報錯>>> s = Template('Using $$ buy ${x}!')>>> s.substitute(x='food')'Using $ buy food!'#利用字典提供鍵/值對>>> 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'>>> s = Template('I am ${name},${age} years old.')>>> d = {'name':'Jerry','age':50}>>> s.substitute(d)'I am Jerry,50 years old.'#>>> s = '%s plus %s equals %s' % (1,1,2)>>> print s1 plus 1 equals 2
------
基本的轉換說明符號:
(1)%字元,標誌轉換的開始
(2)轉換標誌(可選)
- - 靠左對齊
- + 轉換值之前的加號或減號
- " " 空白字元,表示正數之前,保留空格
- 0 轉換值不夠,則用0來填充
(3)最小欄位寬度(可選):
(4).精度值(可選)
- 如果是實數,精度值表示後面的位元
- 如果是字元,精度值表示後面的最大寬度
- 如果是*,精度值從元祖中讀取
(5)轉換類型
------
簡單轉換
>>> print 'price of eggs is %d' % 12price of eggs is 12>>> print 'Hexadecimal price of eggs: %x' % 42Hexadecimal price of eggs: 2a>>> from math import pi>>> 'Pi: %f...' % piPi: 3.141593...>>> 'very inexact estimate of pi: %i' % pivery inexact estimate of pi: 3>>> 'Using str: %s' % 42LUsing str: 42>>> 'Using repr: %r' % 42LUsing repr: 42L
------
欄位的寬度和精度
兩個參數都是整數,用.分割,如果只給出精度,必須包含點號.
>>> '%10f' % pi #寬度為10' 3.141593' >>> '%10.2f' % pi #寬度為10,精度為2' 3.14'>>> '%.2f' % pi #精度為2'3.14'>>> '%.5s' % 'Hello, world!' #字串長度 'Hello'>>> '%.*s' % (5,'Hello,World!')#字串長度,其值從元祖中讀取'Hello'
------
符號、對齊和0填充
在欄位寬度和精度值之前可以放置一個“標表”,可以是0,+," ">>> '%010.2f' % pi #寬度為10,精度2,不夠用0填充'0000003.14'>>> 0108>>> '%-10.2f' % pi #靠左對齊'3.14 '#空格,在對齊正負數時,會很有用>>> print ('% 5d' % 10) + '\n' + ('%5d' % -10) 10 -10#+號,表示不管正數還是負數,標出其正負值,在對齊有用>>> print ('%+5d' % 10) + '\n' + ('%+5d' % -10) +10 -10
字串格式化樣本
width = input('Enter number here:')price_width = 10item_width = width - price_widthheader_format = '%-*s%*s'content_format = '%-*s%*.2f'print '='*widthprint header_format % (item_width,'Item',price_width,'Price')print '-'*widthprint content_format % (item_width,'Apples',price_width,0.4)print content_format % (item_width,'Pears',price_width,0.5)print content_format % (item_width,'Banana',price_width,8)print content_format % (item_width,'Tomato',price_width,6)print '='*width
輸出結果:Enter number here:40========================================Item Price----------------------------------------Apples 0.40Pears 0.50Banana 8.00Tomato 6.00========================================
------
字串方法
find: 在一個長字串中尋找字元,並返回最左邊索引位置,第一個位置為0,未找到為:-1
#find 不返回布爾值: -1:未找到 0:找到,索引為0,即開始位置>>> 'I love python'.find('Perl')-1>>> 'I Love Python'.find('Python')7>>> title = 'Python is so funny language'#如果尋找的對象在開始位置,則為0>>> title.find('Python')0#如果有多個話,返回第一個匹配的索引值>>> title.find('o')4#該方法可以選擇尋找的起始點,終結點>>> subject = '$$$ Get rich now!!! $$$'#預設的話,從0開始尋找>>> subject.find('$$$')0#只提供起始位置>>> subject.find('$$$',1)20#提供了起始位置和終點>>> subject.find('!!!',0,16)-1
------
join: split的反方法,用於在隊列中添加元素
>>> seq = [1,2,3,4,5] #數字列表>>> sep = '+'>>> sep.join(seq)Traceback (most recent call last): File "<pyshell#242>", line 1, in <module> sep.join(seq)TypeError: sequence item 0: expected string, int found>>> 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
------
lower:將字串全部轉為小寫
>>> 'Hello,WORld'.lower()'hello,world'#如果在尋找的時候,輸入是大寫則找不到>>> if 'Jerry' in ['jerry','tom','sherry','john']: print "Found it."#這時需要先轉換為小寫>>> if 'Jerry'.lower() in ['jerry','tom','sherry','john']: print "Found it."Found it.
#title(): 首字母大寫>>> "This is a dog, that's a pig".title()"This Is A Dog, That'S A Pig"#string模組下的capwords()同樣可以實現首字母大寫功能>>> import string>>> string.capwords('hello,world.')'Hello,world.'
------
replace: 找到後,全部替換
>>> 'Tom and Jerry'.replace('Tom','Sherry')'Sherry and Jerry'
------
split: 非常重要的方法,join的反方法
>>> '1+2+3+4+5'.split('+')['1', '2', '3', '4', '5']>>> '/usr/bin/env/python'.split('/')['', 'usr', 'bin', 'env', 'python']#如果不提供任何分割符,則以空格,製表格,分行符號來分割>>> 'Using the default'.split()['Using', 'the', 'default']
------
strip: 除去字串兩側的Null 字元,不包括字串內部
>>> ' How old are you? '.strip()'How old are you?'#如果輸入可能帶空格,則要和strip()結合使用>>> names = ['jerry','sherry','tom']>>> name = 'jerry '>>> if name in names: print 'find it.'>>> if name.strip() in names: print 'find it.'find it.
#也可以指定去除的項,如在本地,則是(除掉首微兩端的*!)>>> '***spam * in * everyone!!!***''***spam * in * everyone!!!***'>>> '***spam * in * everyone!!!***'.strip('*!')'spam * in * everyone'
------
translate: 同replace,可以替換字串中某些部分。區別,translate只處理單個字元.
優勢,可以同時進行多個替換,有些時候比replace效率高.在轉換之前需要準備一張轉換表
>>> from string import maketrans #和maketrans結合使用>>> table = maketrans('cs','kz') #用k替換c,用z替換s>>> 'this is c character'.translate(table)'thiz iz k kharakter'
------
本章函數
string.capwords(s[,sep]) 使用split函數分割字串,使用capitalize將分割得到的各單字首大寫;
並且使join函數以sep為分割符將單詞串連起來
string.maketrans(from,to) 建立用於轉換的表
字串是什?
in vb
dim str as string '聲明字串
str = "231dd&&" '231dd&&為其內容,str為變數名稱
in C
char s[]={""}; //定義Null 字元串 可以看成是變數s數組
s[1]='a';//第一個字元是a 注意這裡用的是單引號
s[2]='\0';//字串結束
字元與字串的不同
character是資料庫中定義的
string是程式設計語言中定義的
比如 String str = 'tom';
資料庫中表table有個欄位name定義了character類型,那麼str就可以儲存到這個表的這個欄位中