python的5大資料型別操作及比較之字串篇
1、去空格及特殊符號
strip: 用來去除頭尾字元、空白符(包括\n、\r、\t、' ',即:換行、回車、製表符、空格)
lstrip:用來去除開頭字元、空白符(包括\n、\r、\t、' ',即:換行、回車、製表符、空格)
rstrip:用來去除結尾字元、空白符(包括\n、\r、\t、' ',即:換行、回車、製表符、空格)
從字面可以看出r=right,l=left,strip、rstrip、lstrip是開發中常用的字串格式化的方法。
注意:這些函式都只會刪除頭和尾的字元,中間的不會刪除。
str_url = 'zjia/sdf1' # 1、去空格及特殊符號 # strip返回移除字串頭尾指定的字元生成的新字串。 # 這個和split容易弄混 a = str_url.strip('1') # zjia/sdf b = str_url.lstrip('zj') # ia/sdf1 c = str_url.rstrip('df1') # zjia/s
2、複製字串:直接複製給另一變數
sStr1 = 'strcpy'
sStr2 = sStr1
sStr1 = 'strcpy2'
print (sStr2,sStr1) # strcpy strcpy2
3、連線字串:+
sStr1 = 'strcat'
sStr2 = 'append'
sStr1 += sStr2
print(sStr1) # strcatappend
4、查詢字元:index
sStr1 = 'strchr'
sStr2 = 's'
nPos = sStr1.index(sStr2)
print (nPos) # 0
5、比較字串
需要匯入模組operator
並且呼叫eq方法
import operator as op
sStr1 = 'strchr'
sStr2 = 'strch'
print(op.eq(sStr1,sStr2)) # False
6、掃描字串是否包含指定的字元:len('str1_naem'and'str2_name')
#strspn(sStr1,sStr2)
sStr1 = '12345678'
sStr2 = '456'
#sStr1 and chars both in sStr1 and sStr2
print(len(sStr1 and sStr2)) # 3
7、字串長度:使用len方法
sStr1 = 'strlen' print(len(sStr1)) # 6
8、將字串中的大小寫轉換
S.lower() #小寫
S.upper() #大寫
S.swapcase() #大小寫互換
S.capitalize() #首字母大寫
String.capwords(S) #這是模組中的方法。它把S用split()函式分開,然後用capitalize()# 把首字母變成大寫,最後用join()合併到一起
9、追加指定長度的字串
sStr1 = '12345'
sStr2 = 'abcdef'
n = 3
sStr1 += sStr2[0:n]
print(sStr1) # 12345abc
10、字串指定長度比較
import operator as op
sStr1 = '12345'
sStr2 = '123bc'
n = 3
print(op.eq(sStr1[0:n],sStr2[0:n]))
11、複製指定長度的字元
sStr1 = ''
sStr2 = '12345'
n = 3
sStr1 = sStr2[0:n]
print(sStr1) #123
12、將字串前n個字元替換為指定的字元
sStr1 = '12345'
ch = 'r'
n = 3
sStr1 = n * ch + sStr1[3:]
print(sStr1) # rrr45
13、掃描字串
sStr1 = 'cekjgdklab'
sStr2 = 'gka'
nPos = -1
for c in sStr1:
if c in sStr2:
nPos = sStr1.index(c)
break
print(nPos) # 2
14、翻轉字串
sStr1 = 'abcdefg'
sStr1 = sStr1[::-1]
print(sStr1
15、查詢字串
sStr1 = 'abcdefg'
sStr2 = 'cde'
print(sStr1.find(sStr2)) # 2
16、分割字串:split
sStr1 = 'ab,cde,fgh,ijk'
sStr2 = ','
sStr1 = sStr1[sStr1.find(sStr2) + 1:]
print(sStr1) # cde,fgh,ijk
#或者
s = 'ab,cde,fgh,ijk'
print(s.split(',')) # ['ab', 'cde', 'fgh', 'ijk']
17、連線字串:要想轉化為實際的型別需要賦值給一個物件
delimiter = ','
mylist = ['Brazil', 'Russia', 'India', 'China']
print(delimiter.join(mylist)) # Brazil,Russia,India,China
b = delimiter.join(mylist)
print(b) # Brazil,Russia,India,China
18、PHP 中 addslashes 的實現
def addslashes(s):
d = {'"':'\\"', "'":"\\'", "\0":"\\\0", "\\":"\\\\"}
return ''.join(d.get(c, c) for c in s)
s = "John 'Johny' Doe (a.k.a. \"Super Joe\")\\\0"
print(s) # John 'Johny' Doe (a.k.a. "Super Joe")\
print(addslashes(s)) # John \'Johny\' Doe (a.k.a. \"Super Joe\")\\\
19、只顯示字母與數字
def OnlyCharNum(s,oth=''):
s2 = s.lower()
fomart = 'abcdefghijklmnopqrstuvwxyz0123456789'
for c in s2:
if not c in fomart:
s = s.replace(c,'')
return s
print(OnlyCharNum("a000 aa-b")) # OnlyCharNum
20、擷取字串
字串不是列表,元素不需要用,分開來確認索引是多少
逆序擷取,第一位不選取,最後一位預設他的方向,也默認了第一位的位置
str = '0123456789' # 不是列表,元素不需要用,分開來確認索引是多少
# 012
print(str[0:3]) #擷取第一位到第三位的字元
# 0123456789
print (str[:] )#擷取字串的全部字元
# 6789
print (str[6:]) #擷取第七個字元到結尾
# 0123456
print (str[:-3]) #擷取從頭開始到倒數第三個字元之前
# 2
print (str[2]) #擷取第三個字元
# 9
print (str[-1]) #擷取倒數第一個字元
# 9876543210
print (str[::-1]) #創造一個與原字串順序相反的字串
# 78
print (str[-3:-1]) #擷取倒數第三位與倒數第一位之前的字元
# 789
print (str[-3:]) #擷取倒數第三位到結尾
# 96
print (str[:-6:-3]) #逆序擷取,第一位不選取,最後一位預設他的方向,也默認了第一位的位置
21、字串在輸出時的對齊
print("|","Ursula".ljust(20),"|") #左對齊
print("|","Ursula".center(20),"|") #居中對齊
print("|","Ursula".rjust(20),"|") #右對齊
# #執行結果
# | Ursula |
# | Ursula |
# | Ursula |
# 通過format()函式格式化實現左對齊、居中、右對齊
print("|",format("Ursula","*>20"),"|") #左對齊
print("|",format("Ursula","*^20"),"|") #居中對齊
print("|",format("Ursula","*<20"),"|") #右對齊
22、字串中的搜尋和替換
str = '3482'
S = '123 456789' # find index rfind rindex count replace strip lstrip expandtabs
S.find(str, beg=0, end=len(S))
#返回S中出現str的第一個字母的標號,如果S中沒有str則返回-1。start和end作用就相當於在S[start:end]中搜索
S.index(str, beg=0, end=len(S))
#與find()相同,只是在S中沒有str時,會返回一個執行時錯誤
S.rfind(str, beg=0, end=len(S))
#返回S中最後出現的str的第一個字母的標號,如果S中沒有str則返回-1,也就是說從右邊算起的第一次出現的str的首字母標號
S.rindex(str, beg=0, end=len(S))
S.count(str, beg=0, end=len(S)) #計算str在S中出現的次數
S.replace('1','i', 2) # old, new[, max]
#把S中的old替換為new,max為替換次數。這是替換的通用形式,還有一些函式進行特殊字元的替換
S.strip('19')
#把S中前後chars中有的字元全部去掉,可以理解為把S前後chars替換為None
S.lstrip('1')
S.rstrip('9')
S.expandtabs(3) # str.expandtabs(tabsize=8)
#把S中的tab字元替換沒空格,每個tab替換為tabsize個空格,預設是8個
23、字串的分割和組合
S = '123 45678 9'
seq = 'zz'
print(S.split(' ',1))
# ['123', ' 45678 9']
#以空格為分隔符,把S分成一個list。maxsplit表示分割的次數。預設的分割符為空白字元
print(S.rsplit(' ', 1))
# ['123 45678 ', '9']
print(S.splitlines(True))
#['123 45678 9']
# splitlines()方法按照行('\r', '\r\n', \n')分隔字串,
# 返回一個包含各行作為元素的列表,如果引數 keepends 為 False,不包含換行符,如果為 True,則保留換行符。
#把S按照行分割符分為一個list,keepends是一個bool值,如果為真每行後而會保留行分割符。
print(S.join(seq)) #把seq代表的序列──字串序列,用S連線起來
# z123 45678 9z # join是迭代的方法,這個方法,將可迭代的資料型別轉為字串或者bytes
# join迭代的方法注意這個可迭代的資料中的元素必須是相同型別的。
24、字串的mapping,建立字元對映的轉換表
# 使用maketrans() 方法將所有母音字母轉換為指定的數字:
intab = "aeiou"
outtab = "12345"
trantab = str.maketrans(intab, outtab)
# intab -- 字串中要替代的字元組成的字串。
# outtab -- 相應的對映字元的字串。
str = "this is string example....wow!!!"
print (str.translate(trantab)) # th3s 3s str3ng 2x1mpl2....w4w!!!
25、字串還有一對編碼和解碼的函式
# 編碼和解碼
# 編碼str.encode(encoding='UTF-8',errors='strict')
str = "this is string example....wow!!!"
b = str.encode('gbk','strict')
print( b) # b'this is string example....wow!!!'
# 其中encoding可以有多種值,比如gb2312 gbk gb18030 bz2 zlib big5 bzse64等都支援。errors預設值為"strict",意思是UnicodeError。可能的值還有'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 和所有的通過codecs.register_error註冊的值。這一部分內容涉及codecs模組,不是特明白
# 解碼
c = b.decode('utf-8','strict')
print(c) # this is string example....wow!!!
26、字串的測試、判斷函式,這一類函式在string模組中沒有,這些函式返回的都是bool值
S代表某字串
S.isalnum() 所有字元都是數字或字母,為真返回Ture,否則返回False
S.isalha() 所有字元都是字母,為真返回Ture,否則返回False
S.isdigit() 所有字元都是數字,為真返回Ture,否則返回False
S.islower() 所有字元都是小寫,為真返回Ture,否則返回False
S.isupper() 所有字元都是大寫,為真返回Ture,否則返回False
S.istitle() 所有單詞都是首字母大寫,為真返回Ture,否則返回False
S.isspace() 所有字元都是空白字元,為真返回Ture,否則返回False
使用int() 可以將小數轉化為整數,結果是向下取整。
使用int()按照四捨五入方式取整:
1、四捨五入的結果為5: int(5.4+0.5)==5
2、四捨五入的結果為6:int(5.6+0.5)==6
27、python3中各種型別轉換函式
int (x [,base]) 將 x 轉換為一個整數
long (x [,base]) 將 x 轉換為一個長整數
float (x) 將 x 轉換到一個浮點數
complex (real [,imag]) 建立一個複數
str (x) 將物件 x 轉換為字串
repr (x) 將物件 x 轉換為表示式字串
eval (str) 用來計算在字串中的有效 Python 表示式,並返回一個物件
tuple (s) 將序列 s 轉換為一個元組
list (s) 將序列 s 轉換為一個列表
chr (x) 將一個整數轉換為一個字元
unichr (x) 將一個整數轉換為 Unicode 字元 (python3中剔除)
ord (x) 將一個字元轉換為它的整數值
hex (x) 將一個整數轉換為一個十六進位制字串
oct (x) 將一個整數轉換為一個八進位制字串
字串物件是不可改變的,也就是說在python建立一個字串後,你不能把這個字元中的某一部分改變。任何上面的函式改變了字串後,都會返回一個新的字串,原字串並沒有變。其實這也是有變通的辦法的,可以用S=list(S)這個函式把S變為由單個字元為成員的list,這樣的話就可以使用S[3]='a'的方式改變值,然後再使用S=" ".join(S)還原成字串