字符串

常見字符串常量和表達式python

s = '' #空字符串
s = "spam's" #雙引號和單引號
s = 's\np\ta\x00m' #轉義序列
s = """...""" #三重引號字符串塊
s = r'\temp\spam' #Raw字符串
s = b'spam' #python3.0中的字節字符串
s = u'spam' #僅在python2.6中使用的unicode字符串
s1 + s2 #合併
s * 3 #重複
s[i] #索引
s [i:j] #分片
len(s) #求長度
"a %s parrot" % kind #字符串格式化表達式
"a {0} parrot".format(kind) #python2.6和python3.0的字符串格式方法
s.find('pa') #字符串方法:搜索
s.rstrip() #移除空格
s.replace('pa', 'xx') #替換
s.split(',') #用佔位符分割
s.isdigit() #檢查是否只由數字組成
s.lower() #轉爲小寫
s.endswith('spam') #是否以制定後綴結尾
'spam'.join(strlist) #插入分割符
s.encode('latin-1') #unicode編碼
for x in s: print(x) #迭代,成員關係
'spam' in s
[c * 2 for c in s]
map(ord, s)

字符串常量git

單雙引號字符串是同樣的,並且python會自動在任意表達式中合併相鄰的字符串常量。數據庫

title = "Meaning " 'of' " Life"
#'Meaning of Life'

用轉義序列表明特殊字節工具

\newline #忽視(連續)
\\ #反斜槓
\' #單引號
\" #雙引號
\a #響鈴
\b #倒退
\f #換頁
\n #換行
\r #返回
\t #水平製表符
\v #垂直製表符
\N #unicode數據庫ID
\uhhhh #unicode 16位的十六進制值
\Uhhhhhhhh #unicode 32位的十六進制值
\xhh #十六進制值
\0xx #八進制值
\0 #Null
\other #不轉義

一些轉義字符容許一個字符串中嵌入絕對的二進制值。編碼

s = 'a\0b\0c'
s
#'a\x00b\x00c'
len(s)
#5

注意,python以十六進制現實非打印的字符。spa

若是python找不到合法的轉義編碼,就會保留反斜槓。code

raw字符串抑制轉義orm

若是使用如下參數去打開文件就會出錯:對象

myfile = open('C:\new\text.dat', 'w')

\n會被識別爲一個換行字符,\t會被識別爲一個製表符。若是在字符串第一個引號前面放一個字母r(大寫或小寫),它就會關閉轉義機制。blog

myfile = open(r'C:\new\text.dat', 'w')

還有一種辦法,用兩個反斜槓來表明一個反斜槓。

myfile = open('C:\\new\\text.dat', 'w')

三重引號編寫多行字符串塊

若是但願一些行的代碼不工做,以後再運行,能夠簡單在這幾行先後加入三重引號。

x = 1
"""
import os
print(os.getcwd())
"""
y = 2

實際應用中的字符串

基本操做

字符串能夠用+來合併,*來重複。

'abc' + 'def'
#'abcdef'

'NI!' * 5
#'NI!NI!NI!NI!NI!'

能夠用for語句在字符串中循環迭代,in操做符能夠對字符串進行搜索。

my = 'dsfdgdfg'
for c in my:
     print(c, end = ' ')
#d s f d g d f g

'd' in my
#True

'f' in my
#True

索引和分片

python能夠經過索引來獲取字符串中的字符,python的偏移量從0開始,而且還支持負偏移量,一個負偏移加上字符串的長度就等於正偏移,能夠把負偏移看作從結束處反向計數。

s = 'spam'
s[0], s[-2]
#('s', 'a')

s[1:3], s[1:], s[:-1]
#('pa', 'pam', 'spa')

當使用分片時,左邊的偏移做爲下邊界(下邊界包含在內),右邊的偏移做爲上邊界(不包含上邊界在內)。python將獲取從下邊界開始直到不包含上邊界的全部元素。若是省略,上下邊界默認分別是0和對象的長度。

索引s[i]獲取特定偏移的元素:

  • 第一個元素偏移爲0
  • 負偏移意味着從最後或右邊反向計數
  • s[0]獲取第一個元素,s[-2]獲取倒數第二個元素,就和s[len(s)-2]同樣

分片s[i:j]提取對應部分做爲一個序列:

  • 上邊界並不包含在內
  • 分片的默認邊界爲0和序列的長度
  • s[1:3]獲取了從偏移爲1的元素到不包含偏移爲3的元素
  • s[:]獲取了偏移0到末尾之間的元素,有效實現頂層s拷貝

s[i:j]實現了一個徹底的頂層的序列對象的拷貝,一個有相同值,可是不一樣內存片區的對象。但對於字符串這樣不可變對象並非頗有用,但對於能夠原地修改的對象卻很實用,例如列表。

擴展分片:第三個限制值

分片的第三個索引,是步進。完整的分片爲x[i:j:k],這表示「索引x對象中的元素,從偏移爲i知道偏移爲j-1,沒隔k個元素索引一次」。k默認是1,若是定義了一個值,就會跳過某些元素或者反向排列順序。

s = 'abcdefghijklmnop'
s[1:10:2]
#'bdfhj'
s[::2]
#'acegikmo'

若是使用負數做爲步進,步進-1表示從右往左,實際效果就是將序列反向。

s = 'hello'
s[::-1]
'olleh'

字符串轉換工具

int('42'), str(42)
#(42, '42')

repr(42)
#'42'

int()將字符串轉換成數字,而str()將數字轉換成字符串。repr()也能夠轉換對象爲字符串。

repr()與str()的區別是,repr()返回的對象能夠做爲代碼字符串,能夠從新建立對象,也就是說obj = eval(repr(obj))是成立的。

字符串代碼轉換

單個字符能夠傳給ord()轉換爲對應的ASCII碼。

ord('s')
#115

chr(115)
#'s'

下面的程序能夠轉換二進制數爲十進制數:

b = '1101'
i = 0
while b != '':
    i = i * 2 + (ord(b[0]) - ord('0'))
    b =b[1:]
i
#13

修改字符串

字符串是不可變序列,因此想要原地修改字符串會報錯,所以須要利用合併,分片這樣的工具來處理而後賦值給一個新的字符串。也能夠使用字符串格式化。

注意:

python3.0和2.6中引入了一種新字符串類型bytearray,它能夠修改。bytearray並非真正的字符串,它是較小的,8位整數序列。

字符串方法

相關文章
相關標籤/搜索