1. 程式人生 > 其它 >python的5大資料型別操作及比較之字串篇

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)還原成字串