1. 程式人生 > >python 3 字串總結

python 3 字串總結

Python 3字串總結

一 概要

字串是一種有序的字元集合,用於表示文字資料。字串的字元可以是ASCII字元,各種符號以及各種Unicode字元。嚴格意義上,字串屬於不可變序列,意味著不能直接修改字串(即不能原處修改)。字串中的字元按照從左到右的順序,具體位置順序,支援索引,分片等操作。


二 字串常量

Python中字串常量可以用下列多種方式表示。

  •  單引號: 'a'、'123'、'abc'。
  •  雙引號:   "a"、"123"、"abc"。
  •  三個單引號或三個雙引號:'''Python code'''、"""Python string""",可以表示多行字元。
  • 帶r或R字首的Raw字串:r'abc\n123'、R'abc\n123'。
  • 帶u或U字首的Unicode字串:u'asdf'、U'asdf'。

字串都是str型別的物件,可用內建的str函式來建立str字串物件。列如:

>>> x=str(123)  #用數字建立字串物件
>>> print(x)
123
>>> type(x)   #測試字串物件型別
<class 'str'>
>>> x=str(u'abc12')  #用字串常量建立字串物件
>>> x
'abc12'

1.單引號與雙引號

在表示字串常量時,單引號和雙引號沒有區別。在單引號字串中可嵌入雙引號,在雙引號字串中可嵌入單引號,但不能在雙引號中嵌入雙引號,單引號中嵌入單引號。例如:

>>> '123"abc'
'123"abc'
>>> "123'abc"
"123'abc"
>>> print('123"abc',"123'abc")
123"abc 123'abc
>>> "123"abc"
  File "<stdin>", line 1
    "123"abc"
           ^
SyntaxError: invalid syntax
>>> '123'abc'
  File "<stdin>", line 1
    '123'abc'
           ^
SyntaxError: invalid syntax

在互動模式下,直接顯示字串時,預設用單引號顯示。如果字串中有單引號,則用雙引號表示。注意,單引號或雙引號不會在列印時顯示。


2.三引號

三引號通常用於表示多行字串(也稱塊字元)。例如:

>>> x="""This is
... a Python
... example"""
>>> x
'This is\na Python\nexample'
>>> print(x)
This is
a Python
example

三引號一般會用於作為文件註釋,在執行時被忽略。


3.轉義字元

轉義字元 說明  
\\ 反斜線
\' 單引號
\"  雙引號
\a 響鈴符
\b 退格符
\f 換頁符
\n 換行符
\r 回車符
\t 水平製表符
\v 垂直製表符
\0 Null,空字串

三 字串的基本操作

字串基本操作包括求字串長度、包含性判斷、連線、迭代、索引和分片以及轉換

1.求字串長度

字串長度指字串中包含的字元個數,可用len函式獲得字串長度。例如:

>>> len('abcdefg')
7

2.包含性判斷

字串為字元的有序集合,所以可用in操作符判斷字串包含關係。例如:

>>> x='abcdefg'
>>> 'a' in x
True
>>> 'q' in x
False

3.字串的連線

字串的連線是把多個字串按順序合併成一個新的字串。例如:

>>> '12'+'34'+'56'
'123456'
>>> '12'*3
'121212'

4.字串的迭代

可用for迴圈迭代處理字串。例如:

>>> for a in 'abc':print(a)
...
a
b
c

5.索引和分片

字串作為一個有序集合,其中的每個字元可以通過偏移量來進行索引或分片。

索引是通過偏移量來獲得字串中的單個字元。跟JAVA中的陣列中獲取陣列中的元素型別。例如:

>>> x='abcdefg'
>>> x[0]
'a'
>>> x[-1]
'g'
>>> x[3]
'd'

索引可獲得指定位置的單個字元,但不能通過索引來修改字串。因為字串物件不允許被修改


分片是利用範圍從字串中連續獲得多個字元。分片的基本操作:

x [start:end]
表示返回變數x引用的字串中從偏移量start開始,到偏移量end之間( 不包含偏移量end對應的字元)的子字串。start和end引數均可省略,start預設是0,end預設為字串長度。例如:
>>> x='abcdefg'
>>> x[1:4]  #返回偏移量為1到3的字元
'bcd'
>>> x[1:]  #返回偏移量為1到末尾的字元
'bcdefg'
>>> x[:4] #返回字串開頭到偏移量為3的字元
'abcd'
>>> x[:-1] #除最後一個字元,其他字元全部返回
'abcdef'
>>> x[:] #返回全部字元
'abcdefg'

還可以增加一個步長引數來跳過中間的字元。例如:

x [start:end:step]

用這種分片時,會跳過中間的step個字元,step預設為1。例如:

>>> x='0123456789'
>>> x[1:7:2]  #返回偏移量為1、3、5的字元
'135'
>>> x[::2] #返回偏移量為偶數的全部字元
'02468'
>>> x[7:1:-2] #返回偏移量為7、5、3的字元
'753'
>>> x[::-1] #將字元反序返回
'9876543210'

可以看到,步長為負數時,返回的字元與原來的順序相反。


6.字串轉換

可用str函式將數字轉換成字串。例如:

>>> str(123)
'123'
>>> str(1.23)
'1.23'

四.字串方法

字串作為str型別物件,Python提供了一系列方法用於字串處理

1.capitalize()

將字串第一個字母大寫,其餘字母小寫,返回新的字串。例如:

>>> 'this is Python'.capitalize()
'This is python'

2.count(sub[,start[,end]])

返回子字串sub在字串x的[start,end]範圍內出現的次數,省略範圍時查詢整個字串。例如:

>>> 'abcabcabc'.count('ab') #在整個字串中統計ab出現的次數
3
>>> 'abcabcabc'.count('ab',2) #從第3個字元開始到字串末尾統計ab出現的次數
2

3.endswith(sub[,start[,end]])

判斷[start,end]範圍內的子字串是否以sub字串結尾。例如:

>>> 'abcabcabc'.endswith('bc')
True
>>> 'abcabcabc'.endswith('b')
False

4.startswith(sub[,start[,end]])

判斷[start,end]範圍內的子字串是否以sub字串開頭。例如:

>>> 'abcd'.startswith('ab')
True
>>> 'abcd'.startswith('b')
False

5.expandtabs(tabsize=8)

將字串中的Tab字元替換為空格,引數預設為8,即一個Tab字元替換為8個空格。例如:

>>> x='12\t34\t56'
>>> x
'12\t34\t56'
>>> x.expandtabs() #預設每個Tab字元替換為8個空格
'12      34      56'
>>> x.expandtabs(0) #引數為0時刪除全部Tab字元
'123456'
>>> x.expandtabs(4) #每個Tab字元替換為4個空格
'12  34  56'

6.find(sub[,start[,end]])

在[start,end]範圍內查詢子字串sub,返回第一次出現位置的偏移量。沒有找到返回-1.例如:

>>> x='abcdabcd'
>>> x.find('ab')
0
>>> x.find('ab',2)
4
>>> x.find('ba')
-1

7.index(sub[,start[,end]])

與find()方法相同,只是在未找到子字串時產生ValueError異常。例如:

>>> x='abcdabcd'
>>> x.index('ab')
0
>>> x.index('ab',2)
4
>>> x.index('e')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

8.rfind(sub[,start[,end]])

在[start,end]範圍內查詢子字串sub,返回最後一次出現位置的偏移量。沒有找到時返回-1.例如:

>>> 'abcdabcd'.rfind('ab')
4

9.rindex(sub[,start[,end]])

與rfind()方法相同,只是在未找到子字串時產生ValueError異常。例如:

>>> 'abcdabcd'.rindex('ab')
4

10.format(args)

字串格式化,將字串中用{}定義的替換域依此用引數args替換。例如:

>>> 'My name is {0},age is {1}'.format('Tome',23)
'My name is Tome,age is 23'

11.format_map(map)

使用對映完成字串格式化。例如:

>>> 'My name is {name},age is {age}'.format_map({'name':'Tome','age':23})
'My name is Tome,age is 23'

12.isalnum()

字串由數字或字母組成時返回True,否則返回False。例如:

>>> '123'.isalnum()
True

13.isalpha()

字串中的字元全部是字母時返回True,否則返回False。例如:

>>> 'acv'.isalpha()
True

14.isdecimal()

字串中的字元全部是數字時返回True,否則返回Fasle。例如:

>>> '123'.isdecimal()
True

15.isdigit()

字串中的字元全部是數字時返回True,否則返回False。例如:

>>> '123'.isdigit()
True

16.isnumeric()

字串中的字元全部是數字時返回True,否則返回False。例如:

>>> '123'.isnumeric()
True

17.islower()

字串中的字母全部是小寫字母時返回True,否則返回False。例如:

>>> 'abc123'.islower()
True

18.isupper()

字串中的字母全部是大寫字母時返回True,否則返回False。例如:

>>> 'ABD123'.islower()
False

19.isspace()

字串中的字元全部是空格時返回True,否則返回False。例如:

>>> '   '.isspace()
True

20.ljust(width[,fillchar])

當字串長度小於width時,在字串末尾填充fillchar,使長度等於width。預設填充字元為空格。例如:

>>> 'adv'.ljust(8)
'adv     '

21.rjust(width[,fillchar])

與ljust()方法類似,只是在字串開頭填充字元。例如:

>>> 'abc'.rjust(8)
'     abc'

22.lower()

將字串中的字母全部轉換成小寫。例如:

>>> 'This is ABC'.lower()
'this is abc'

23.upper()

將字串中的字母全部轉換成大寫。例如:

>>> 'This is ABC'.upper()
'THIS IS ABC'

24.lstrip([chars])

未指定引數chars刪除字串開頭的空格、回車符以及換行符,否則刪除字串開頭包含在chars中的字元。例如:

>>> '\n\r  abc'.lstrip()
'abc'

25.rstrip([chars])

未指定引數chars刪除字串末尾的空格、回車符以及換行符,否則刪除字串末尾包含在chars中的字元。例如:

>>> '\n abc \r\n'.rstrip()
'\n abc'

26.strip([chars])

未指定引數chars刪除字串首尾的空格,回車符以及換行符,否則刪除字串首尾包含著chars中的字元。例如:

>>> '\n \r abc \r\n'.strip()
'abc'

27.partition(sep)

將字串從sep第一次出現的位置分隔成三部分:sep之前、sep和sep之後,返回一個三元組。沒有找到sep時,返回字串本身和兩個空格組成的三元組。例如:

>>> 'abc123abc123abc123'.partition('12')
('abc', '12', '3abc123abc123')

28.rpartition(sep)

與partition()類似,只是在從字串末尾開始找第一個sep。例如:

>>> 'abc123abc123abc123'.rpartition('12')
('abc123abc123abc', '12', '3')
29.replace(old,new[,count])

從字串開頭,依次將包含的old字串替換為new字串,省略count時替換全部old字串。指定count時,替換次數不能大於count。例如:

>>> x='ab12'*4
>>> x
'ab12ab12ab12ab12'
>>> x.replace('12','000')  #將12全部替換成000
'ab000ab000ab000ab000'

30.split([sep],[maxsplit])

將字串按照sep指定的分隔字串分解,然後返回分解後的列表。sep省略時,以空格為分隔符。maxsplit指定分解次數。例如:

>>> 'ab cd ef'.split()
['ab', 'cd', 'ef']

31.swapcase()

將字串中的字母大小寫互換。例如:

>>> 'adcDEF'.swapcase()
'ADCdef'

32.zfill(width)

如果字串長度小於width,則在字串開頭填充0,使長度等於width。如果第一個字元為加號或減號,則在加號或減號之後填充0.例如:

>>> 'abc'.zfill(8)
'00000abc'
>>> '+12'.zfill(8)
'+0000012'



五.字串格式化表示式

字串除了用format()方法進行格式化外,還可使用格式化表示式來處理字串。字串格式化表示式用%表示,%之前為需要進行格式化的字串,%之後為需要填入字串中的實際引數。例如:

>>> "The %s'sprice id %4.2f" %('apple',2.5)
"The apple'sprice id 2.50"

在字串"The %s's price id %4.2f"中,%s和%4.2f是格式控制符。引數表('apple',2.5)中的引數依次填入各個格式控制符。

Python的格式控制符如下表所示:

Python格式控制符

格式控制符 說明
s 引數為字串或其他任何物件
r 同s,但字串用repr表示式
c 引數為單個字元或字元的ASCII碼
d 引數轉換為十進位制整數
i 引數轉換為十進位制整數
u 引數轉換為十進位制整數
o 引數轉換為八進位制整數
x 引數轉換為十六進位制整數,字母小寫
X 引數轉換為十六進位制整數,字母大寫
e、E 按科學計數法格式轉換為浮點數
f、F 按定點小數格式轉換浮點數
g、G 按定點小數格式轉換為浮點數

使用時,格式控制符的基本結構如下。

%[name][flags][width[.precision]]格式控制符

其中:name為字典物件的鍵,flags為正負號+/-、左對齊-或0(補零標誌),width指定數字的寬度,precision指定數字的小數位數。