一:學習內容
- 字符串運算
- 字符串函數-strip()
- 字符串函數-大小寫互換
- 字符串函數-字符串對齊
- 字符串函數-搜索
- 字符串函數-替換
- 字符串函數-split切割
- 字符串函數-連接join
- 字符串函數-統計count
- 字符串函數-字符串映射
- 字符串函數-測試字符串
二:字符串運算
1. +加,拼接
a='a'
b='b'
print a+b

2. *星號,重復輸出字符串
print '*'*20

3. [],通過索引輸出字符串
a='dsafdsaf'
a[3]

4. [:],截取字符串
s='dsafldsal'
s[::-1] #逆序輸出
s[2:5:2] #輸出索引位置為2到索引位置為5的數據,不包括位置3,且步長為2,即輸出索引位置為2,4的數據即s[2],s[4]
s[-3:-6:-1] #輸出索引位置為-3到索引位置為-6的數據,不包括位置-6,步長為-1,s字符串最右邊的位置索引為-1,往右為-2,-3..,即輸出字符串從右往左位置第3位到第5位的數據

s='abcdefghijk'
s[::2] #偶數
s[1::2] #奇數
s[::-1] #逆序輸出
s[:] #全部輸出
s[::3] #步長為3
s[-1:-6:-1] #取倒數第一個到第5個

5. in、not in,成員運費符包括、不包括
'a' in 'dsalla'
'c' in 'dlsaa'
'c' not in 'dsalla'

6. r、R-原始字符串
print r'\\'
print R'\\'

7. %-格式化字符串
%s為字符串
%d為數字
%c為char,只能為一個字符
%f為float,為浮點型
print 'i am %s' % 'yml'
print 'i am %s,my age is %d' % ('yml',25)

print 'i have %.2f apple' % 7.9 #保留兩位小數
print 'it is %c' % '0'

print 'i have %x apple' % 16
print 'i have %o apple' % 16

print 'i have %c apple' % '1' #%c格式化字符及其ASCII碼
print 'i have %5s apple' % 45 #%s格式化字符串
print 'i have %2d apple' % 3 #%d格式化整數
print 'i have %u apple' % 3 #%u格式化無符號整型
print 'i have %o apple' % 15 #%o格式化無符號八進制數
print 'i have %x apple' % 15 #%x格式化無符號十六進制數
print 'i have %.2f apple' % 15 #%f格式化浮點數,可指定小數點后的位數默認6位
print 'i have %e apple' % 15 #%e用科學技術法格式化浮點數
print 'i have %E apple' % 15 #%E用科學技術法格式化浮點數
print 'i have %g apple' % 15 #%f和%e的簡寫

三:字符串函數-strip()函數
1. strip()-去掉首尾不可見字符
將前后包含的空格和不可見字符去掉
可以看到不僅去掉了空格還去掉了tab、\r、\n、\t等不可見字符


data=raw_input('請輸入一個字符串:')
data
print data
print data.strip()

輸入:\n\t\r fda das\t\n,輸出的效果就是去不掉\n\t等不可見字符
后來發現,raw_input輸入進來的\n\t等不可見字符存在內存中會自動加上\來避免轉義,我之前用print所以看不見那個多出來的\

這點需要注意。
2. lstrip()-去掉左側不可見字符
'\na b\r'.lstrip()

3. rstrip()-去掉右側不可見字符
'\na b\r'.rstrip()

3. strip('')-去掉首尾中指定字符
'*badsafd5'.strip('*')

四:字符串函數-大小寫互換
1. lower()-將字符串大寫轉小寫
'ABdd'.lower()

2. upper()-將字符串小寫轉大寫
'ABdd'.upper()

3. swapcase()-將字符串小寫轉大寫,大寫轉小寫
'ABdd'.swapcase()

4. capitalize()-將字符串第一個字母變大寫
'abcded'.capitalize()
'i am girl'.capitalize()

5. capwords()-將字符串每個單詞的首字母變大寫
import string
string.capwords('i am a girl')

6. title()-將字符串每個單詞的首字母變大寫,類似上面的capwords
'i am girl'.title()
'I am girl'.title()

五:字符串函數-字符串對齊
1. ljust(length,[s])-左對齊補齊字符串達到length的長度,不寫s默認用空補充,如果字符串本身的長度比length要長,則默認全部輸出字符串
'abc'.ljust(10)
'abc'.ljust(10,'*')

'abcsalfdsafdsfdsa'.ljust(3)

2. rjust(length,[s])-右對齊補齊字符串達到length的長度,不寫s默認用空補充,如果字符串本身的長度比length要長,則默認全部輸出字符串
'abc'.rjust(5)
'abc'.rjust(5,'#')

'abcsalfdsafdsfdsa'.rjust(3)

3. center(length,[s])- 居中對齊補齊字符串達到length的長度,不寫s默認用空補充,如果字符串本身的長度比length要長,則默認全部輸出字符串
'abc'.center(10)
'abc'.center(10,'*')
'abcedfds'.center(5,'*')
'abcedfds'.center(5)

4. zfill(length)-只能填充0,參數只有一個,而且是前面補0,如果字符串本身長度比length長,則默認輸出全部字符串
'abc'.zfill(5)
'abcddddfas'.zfill(5)
'abcddddfas'.zfill(5,'*') #此法不可取,zfill只能補0不能指定字符進行補充

六:字符串函數-搜索
1. find(s,[start,end])-從字符串中找s的索引位置,start和end代表尋找區間,為閉開區間,找到則返回索引位置,找不到返回-1
a='test learn'
a.find('learn')
a.find('ea',5)
a.find('ea',5,10)
a.find('te',0,15)
a.find('xx',0,15)

* 小練習-在字符串找到所有滿足的字符串
lis=[]
def find_str(s,f):
temp =0
while f in s:
index = s.find(f)
lis.append(index+temp)
s = s[:index] + s[index+len(f):]
temp+=2
return lis
s='iamymlamtezamamamster'
f='am'
print find_str(s,f)
運行結果:在s中找到f字符串的位置

2. index(s,[start,end])-可在指定字符串范圍內查找字符串出現的位置,找不到返回錯誤
a='abcdefsg'
a.index('de')
a.index('de',1,45)

3. rfind(s,[start,end])-可在指定字符串范圍內從右邊開始查找字符串出現的位置,找不到返回-1,如果查找的字符串有多個,則會找到從右邊開始第一出現的位置
a='abcdefsg'
a.rfind('g')
a.rfind('j',0)
a.rfind('e',1,6)

a=’iamymlamlearning’
a.find(‘am’)
a.rfind(‘am’)


find是從左邊開始找發現am的位置為1,而rfind是從右邊開始找,位置為6
七:字符串函數-替換
1. replace(old,new,count)-從字符串中old替換成new,count為替換次數,不寫默認全部替換
a='iamymlamleanring'
a.replace('am','*') #全部替換
a.replace('am','*',1) #指定替換次數
import string
string.replace(a,'am','*') #string中的replace方法

2. expandtabs([tabsize])-將字符串中每個tab替換成指定tabsize的空格數量,tabsize不寫默認為8個-此函數一般不用很少用,了解即可
s='a\t\tbc'
s.expandtabs()
s.expandtabs(1)
s.expandtabs(3)
s.expandtabs(2)

八:字符串函數-split切割
1. split (s,count)-將字符串以s進行切割,count為切割次數,不寫默認全部切割
a.split('am')
a.split('am',1)
a.split('am',2)

* 輸出一個字符串的單詞個數
#encoding=utf-8
def count_string(s):
s=s.replace(","," ").replace('!',' ')
b=s.split()
return len(b)
s='I am a boy,and handsome!'
print count_string(s)

法二:
len("i am a boy,and handsom !".replace(","," ").replace("!","").split())

2. rsplit (s,count)-將字符串從右邊以s進行切割,count為切割次數,不寫默認全部切割
a='iamymliamlearing'
a.rsplit('am',1)
a.rsplit('am')

3. splitlines ([bool])-按照分隔符分隔字符串bool默認為false
a='1\n2\n'
print a.splitlines()
print a.splitlines(False)
print a.splitlines(True)
print a.splitlines(1)

* 統計文件有多少行內容,多少字符
#encoding=utf-8
with open("C:\\Users\\yumeiling\\Desktop\\a.txt") as fp:
content=fp.read()
print u'行數:',len(content.splitlines()) #文件有多少行
print u'個數:',len("".join(content.splitlines())) #文件有多少個字母

九:字符串函數-連接join()、統計count()
1. rule.join(list):按rule來連接list ,要求list中每項要為字符串
a=['4','s','ds']
''.join(a)
'','.join(a)
'+'.join(a)

2. count(s):統計字符串中s出現的次數
'abcab'.count('a')
'abcab'.count('ab')
'abcab'.count('abc')

九:字符串函數-字符串映射
1. translate (rule,[delstr]):將字符串按rule規則進行映射,並且可用刪除delstr字符串,默認delstr為空即不刪除,先刪除后rule
import string
s=string.maketrans('abc','def')
'iamabcgh'.translate(s)
'abcabcabc'.translate(s)

將a映射成d,將b映射成e,將c映射成f
import string
rule=string.maketrans('abc','def')
'iamymliamlearingabc'.translate(s,'am') #刪除字符串中的所有‘am’字符

2. str和string的區別
str是類型,string是模塊,python3以后就沒有string了,因為3中都是unicode了。
十:字符串函數-字符串解碼和編碼
1. encode()編碼,decode()解碼
str = "this is string example....wow!!!";
str = str.encode('base64','strict');
print "Encoded String: " + str;
print "Decoded String: " + str.decode('base64','strict')

十一:字符串函數-測試字符串
1. startswith(s):判斷字符串是否以s開頭
a='iamymliamlearing'
a.startswith('i')
a.startswith('b')

2. endswith(s):判斷字符串是否以s結尾
a='iamymliamlearing'
a.endswith('b')
a.endswith('g')

3. isalnum ():判斷是否為字母或數字,是返回True,否返回False,且至少有一個字符
'abc2'.isalnum()
'abcd'.isalnum()

4. isalpha (s):判斷s是否為字母,是返回True,否返回False,且至少有一個字母
'abcd'.isalpha()
'abc3'.isalpha()

5. isdigit ():判斷s是否為數字,是返回True,否返回False
'abc2'.isdigit()
'442'.isdigit()

6. isspace ():判斷是否為空格,是返回True,否返回False,不可見字符也會返回True
'abc3 '.isspace()
' '.isspace()
' '.isspace()
' \r\n\t '.isspace()

7. islower ():判斷是否為小寫,是返回True,否返回False,字符串中有數字不影響結果
'abc'.islower()
'abC'.islower()

8. isupper ():判斷是否為大寫,是返回True,否返回False,字符串中有數字不影響結果
'abC'.isupper()
'ABC'.isupper()
'ABC1234'.isupper()

9. istitle ():判斷每個單次的首字母是否為大寫,是返回True,否返回False
'I Am Is Yml23'.istitle()
'I Am Is yml23'.istitle()

