python內置對象---字符串類型
一、字符串常量
編寫方法:
單引號:'f"uck'
雙引號:"f'uck"
三引號:"""fuck""",'''fuck'''
轉義字符:"f\tc\nuc\0k"
Raw字符串:r"C:\new\test.spm"
Byte字符串:b'fu\x01uk'
以下是使用字符串常量表達式創建
實例 1.單雙引號是一樣的
>>> 'fuck',"fuck"
('fuck', 'fuck')
>>> 'fuc"k',"fuc'k"
('fuc"k', "fuc'k")
>>> 'fuc\'k',"fuc\""
("fuc'k", 'fuc"')
2.用轉義序列代表特殊字節,每個轉義字符代表一個字節
>>> s='a\tb\nc'
>>> print(s)
a b
c
>>> len(s)
5
>>>
>>> s='a\0b\0c' # \0標識null(零字符),將八進制編碼轉義為一個數字
>>> s
'a\x00b\x00c'
>>> print(s)
abc
3.raw字符串抑制轉義
myfile=open('C:\new\text.txt','w')打開一個文件時,會被\n和\t替換,此處就使用字母r在引號前使用,抑制轉義。
myfile=open(r'C:\new\text.txt','w')
4.字符串塊:三重引號,編程多行文本數據非常便捷。
>>> s="""fuck
... you
... you
... you
... you"""
>>>
>>> s
'fuck\nyou\nyou\nyou\nyou'
>>> print(s) #print的友好格式
fuck
you
you
you
you
>>>
二、字符串應用
1.基本操作
>>> len('abcdef') #計算字符串長度
6
>>> 'abc'+'def' #合並字符串
'abcdef'
>>> 'fuck'*4 #重復打印字符串
'fuckfuckfuckfuck'
>>>
>>> s='fuck' #定義一個變量x去獲取一個序列(這裏是字符串)的元素,並對每一個元素執行一個或多個語句操作。
>>> for x in s:print(x)
...
f
u
c
k
>>>
2.索引和分片
python中字符串是有序的集合,可以通過其位置獲得他們的元素,字符串中的字符是通過索引提取的。
>>> s='fuck'
>>> s[0],s[-2] #正偏移、負偏移,偏移0就是字符串的第一個字符
('f', 'c')
>>> s[1:2] #分片,使用冒號分隔字符串,python返回一個新的對象,左邊的偏移稱下邊界(包含下邊界在內),右邊的偏移稱上邊界(不包含上邊界)。
'u' #以上就是提取包含下邊界偏移1,直到不包含上邊界偏移2的元素
>>>
>>> s[:1] #下邊界默認值為0
'f'
>>> s[1:] #上邊界默認值為字符串長度
'uck'
>>> s[:-1] #下邊界默認值為0,下邊界是-1(對應元素的最後一項)
'fuc'
>>>
3.擴展分片
X[I:J:K]在X對象中,從偏移為I直到偏移為J-1,每隔K元素索引一次
>>> X='123456789'
>>> X[0:9:3] #提取從偏移值0到8,間隔2個元素的元素
'147'
>>>
>>> Y='hello'
>>> Y[::-1] #可以使用負數做步進,進行反轉
'olleh'
>>>
4.字符串轉換
>>> int('666')+334 #將字符串轉換為數字
1000
>>> '666'+str(334) #將數字轉換為字符串
'666334'
>>> '666'+repr(334) #將對象轉換為字符串
'666334'
>>> ord('a') #將單個字符轉換為ASCII碼
97
>>> chr(97) #將ASCII碼轉換為對象的字符
'a'
>>> q=ord('12')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 2 found #ord()函數期望是一個字符,但是字符串有2個長度了
>>>
5.修改字符串
字符串是一個有序的不可改變的特性,不可變是不可以在原處修改一個字符串。如
>>> s="fuck"
>>> s[0]="why"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>>
若想更改字符串內容,可使用合並、分片工具來建立並復制給一個新的字符串對象。
>>> x='fuck'
>>> x='fuck'+'u'
>>> x
'fucku'
>>> x=x[:3]+'you'+x[4]
>>> x
'fucyouu'
>>>
也可以通過replace函數更改字符串內容
>>> x="fuck"
>>> x=x.replace('ck','n')
>>> x
'fun'
>>>
6.字符串方法(函數)
除了表達式運算符可以處理字符串外,還可以使用字符串方法,方法調用同時進行2次操作。
a.屬性讀取,具有abject.attribute格式的表達式。讀取abject對象的attribute屬性。
b.函數調用表達式,調用函數代碼,傳遞零活更多用逗號隔開的參數對象,最後返回函數的返回值。
1).字符串方法實例:修改字符串
>>> s="fuck"
>>> s=s.replace('ck','n')
>>> s
'fun'
>>> s='xxxfuckxxxfuck'
>>> where=s.find('fuck') #find()方法返回子字符串出現的偏移,未找到返回-1
>>> where
3
>>> s=s[:where]+'ooo'+s[(where+3):]
>>> s
'xxxoookxxxfuck'
>>>
>>> s='fuck'
>>> L=list(s) #將字符串打散為一個序列
>>> L
['f', 'u', 'c', 'k']
>>> L[0]='g' #更改序列內容
>>> L[1]='g'
>>> L
['g', 'g', 'c', 'k']
>>> s=''.join(L) #通過設定NULL分隔符,join將列表字符串鏈接在一起
>>> s
'ggck'
>>>
>>> '000'.join(['f','u','c','k']) #通過設定000分隔符,將列表連接在一起
'f000u000c000k'
>>>
2)字符串方法實例:文本解析
分析結構並提取字串,為了提取固定偏移的字串,可以利用分片技術:
>>> s='aaa bbb ccc'
>>> L1=s[:3]
>>> L2=[8:]
>>> L2=s[8:] #這組數據出現在固定偏移處,因此可以通過分片從原始字符串分出來,這種技術叫 解析。
>>> L1
'aaa'
>>> L2
'ccc'
>>>
>>> s='aaa bbb ccc' #此字符串是有空格分隔的
>>> L1=s.split() #通過split()方法將一個字符串分隔為一個子字符串列表
>>> L1
['aaa', 'bbb', 'ccc']
>>>
>>> s='fuck,u,ha' #字符串中有,
>>> L1=s.split(',') #通過指定分隔符為 ,
>>> L1
['fuck', 'u', 'ha']
>>>
>>> s='aaafuckbbbfuckccc' #字符串重復出現fuck
>>> L1=s.split('fuck') #可以指定分隔符為fuck
>>> L1
['aaa', 'bbb', 'ccc']
>>>
3)實際應用中常見的字符串方法
>>> s='this is a test\n' #定義一個字符串對象
>>> s
'this is a test\n'
>>> s.rstrip() #去除結尾的空行
'this is a test'
>>> s.upper() #轉換為大寫
'THIS IS A TEST\n'
>>> s.endswith('\n') #測試結尾字符是否為\n
True
>>> s.startswith('th') #測試開始字符是否為th
True
>>> s.find('is') != -1 #通過find方法測試變量s中是否存在is子串
True
>>> 'is' in s #可以通過in測試變量s中是否存在is子串
True
>>> str='\n'
>>> s.endswith(str) #給endswith()方法傳入一個變量str來測試變量s是否存在str的值
True
>>> s[-len(str):]==str #通過len函數測試變量s是否存在str的值
True
>>>
7.字符串格式表達式
字符串格式化允許在一個單個的步驟中對一個字符串執行多個特定類型的替換
%在應用於數字時是取余,應用於字符串時是對字符串進行格式化(C語言printf)
格式化字符串;
1.在%操作符左側放置一個需要進行格式化的字符串,這個字符串帶有一個或多個嵌入的轉換目標,都以%開頭。
2.在%操作符右側放置一個對象,這些對象將會插入到左側想讓python進行格式化字符串的一個轉換目標的位置上。
>>> 'this is a %s %d.' %('test',666) #標紅的%右側是想要替換的對象或元組。左側是需要格式化的
'this is a test 666.'
>>>
>>> str='test'
>>> 'this is a %s' % str #可以加入變量
'this is a test'
>>>
註:格式化返回的是一個新的字符串作為結果,而不是對左側的字符串修改。因為字符串是不可變的(原處修改)。
基於字典的字符串格式化
>>> '%(x)s %(y)s %(z)s %(o)s' %{"x":"this","y":"is","z":"a","o":"test"}
'this is a test'
>>>
8.字符串格式化調用方法
format方法:
>>> s='{0},{1},{2}' #在主體字符串中,花括號通過位置指出將要替換的目標
>>> s.format('yan','ya','y')
'yan,ya,y'
>>> s='{h},{a},{i}' #花括號通過關鍵字指出將要替換的目標
>>> s.format(h="yan",a="ya",i="y")
'yan,ya,y'
>>> s='{h},{0},{i}'
>>> s.format("ya",h="yan",i="y")
'yan,ya,y'
>>> '{0},{1},{2}'.format("yan","ya","y")
'yan,ya,y'
>>>
>>> s='{1},{0},{2}' #通過位置指出將要替換的目標
>>> s.format("aa","bb","cc")
'bb,aa,cc'
>>> 'this {1[spam]} test of {0.platform}'.format(sys,{'spam':'is'}) #0 表示第一個位置,.platform 表示位置或關鍵字所引用的一項德對象屬性:sys.platform。
'this is test of linux'
>>>
註:format 字符串格式化方法暫略
python內置對象---字符串類型