簡(jiǎn)介
字符串序列用于表示和存儲(chǔ)文本,python中字符串是不可變的,一旦聲明,不能改變
通常由單引號(hào)(' ),雙引號(hào)(" ),三引號(hào)(''' """)包圍
其中三引號(hào)可以由多行組成,編寫(xiě)多行文本的快捷語(yǔ)法,常用語(yǔ)文檔字符串,在文件的特定地點(diǎn),被當(dāng)做注釋。便捷的多行注釋
Python實(shí)際三類(lèi)字符串:
1.通常意義字符串(str)
2.原始字符串,以大寫(xiě)R 或 小寫(xiě)r開(kāi)始,r'',不對(duì)特殊字符進(jìn)行轉(zhuǎn)義
3.Unicode字符串,u'' basestring子類(lèi)
在 Python 中,字符串是“不可改變的序列”
1.不可變
2.滿(mǎn)足序列基本操作,按位置存取,切片及索引
字符串
1.獲得幫助:
>>> help(str)
>>> dir(str)
>>> help(str.replace)
2.不可變性
在創(chuàng)建之后就不能就地改變(同java),不能通過(guò)對(duì)其某一位置進(jìn)行賦值而改變字符劃分為不可變序列,這些字符串所包含的字符存在從左到右的順序,不可在原處修改。python中字符串相當(dāng)于一個(gè)不可變序列的列表,一旦聲明,每個(gè)字符位置固定
意味著若想改變,必須新建一個(gè)!
>>>s='spam'
>>>s[0]='k'?? #TypeError
#修改字符串類(lèi)似java,重新賦值
s = ‘k' + s[1:]
原始字符串
原始字符串常量,r”abcd”,(r/R)即去掉了反斜線(xiàn)轉(zhuǎn)義機(jī)制。關(guān)閉轉(zhuǎn)義機(jī)制,即\不再表示轉(zhuǎn)義
用處:
1.正則表達(dá)式
用于處理正則表達(dá)式,減少反斜杠
p4search = re.compile(r'\s*')
2.系統(tǒng)路徑
可以方便地表示系統(tǒng)路徑
path = r'e:\book'
unicode字符串
Unicode是書(shū)寫(xiě)國(guó)際文本的標(biāo)準(zhǔn)方法。
Python允許你處理Unicode文本――你只需要在字符串前加上前綴u或U。例如,u"This is a Unicode string."
BP: 在你處理文本文件的時(shí)候使用Unicode字符串,特別是當(dāng)你知道這個(gè)文件含有用非英語(yǔ)的語(yǔ)言寫(xiě)的文本。
常用操作
1.基本操作
+?? :string1+string2??? #聯(lián)接字符串,將后一個(gè)串鏈接到前一個(gè)串的后面
??? Python不允許在+表達(dá)式中出現(xiàn)其他類(lèi)型,需要手工轉(zhuǎn)【這點(diǎn)不同于java】‘a(chǎn)bc'+str(9)
*?? :string*n?????????? #創(chuàng)建一個(gè)新字符串重復(fù)n次原來(lái)的串
[]? :string[n]????????? #從字符串中獲取對(duì)應(yīng)位置的一個(gè)字符
[:] :string[n:m]??????? #截取字符串,如果為:m從頭到m如果為n:從n到尾
in? :char in string #判斷一個(gè)字符是否在串中,如果在返回為真(True)
not in :char not in string #判斷一個(gè)字符是否不在串中,如果在返回為真(True)
r/R : r/Rstring???? #禁止轉(zhuǎn)義字符的實(shí)際意義,整個(gè)字符為原始意義
len() : 長(zhǎng)度len(s)
2.類(lèi)型轉(zhuǎn)換
字符串和數(shù)字相互轉(zhuǎn)換
字符串到數(shù)字int/float/long
數(shù)字到字符串str
>>> int(42)
42
>>> int('42')
42
>>> str(42)
'42'
>>> float('42.0')
42.0
>>> str(42.0)
'42.0'
或者使用string模塊的函數(shù)
s:進(jìn)行轉(zhuǎn)換的字符串, base:可選,目標(biāo)進(jìn)制
import string
string.atoi(s[,base])?? #base默認(rèn)為10,如果為0,那么s就可以是012或0x23這種形式的字符串,如果是16那么s就只能是0x23或0X12這種形式的字符串????
string.atol(s[,base])?????? #轉(zhuǎn)成long
string.atof(s[,base])?????? #轉(zhuǎn)成float
字符串和列表的轉(zhuǎn)換
字符串轉(zhuǎn)列表:
s='spam'
l = list(s)
l2 = "hello world".spilt()
列表轉(zhuǎn)字符串
k = ‘'.join(l)
注意,不能join列表中的非字符串
3.修改字符串
s =? s + 'a'
s = s[3:] + ‘b'
s = s.replace(‘pl','pa')
a = '' #賦值空
del a? #整個(gè)變量刪除
4.索引和分片
索引s[i]
s[0]首個(gè)
s[-1] = s[len(s)-1] 倒數(shù)第一個(gè)
分片s[i:j]
不含上邊界,s[1:3] 取[1-2]
s[1:]取1到結(jié)束?? s[:3] 取開(kāi)始到2
s[:-1]開(kāi)始到倒數(shù)第二個(gè)
s[:]開(kāi)始到結(jié)尾,相當(dāng)于一個(gè)復(fù)制
s[1:10:2]? 取1-9,步長(zhǎng)=2
s[a:b:-2] 步長(zhǎng)為負(fù)數(shù),兩個(gè)邊界意義反轉(zhuǎn)了,表示從b+1到a,步長(zhǎng)-2
s='abcdefg'??
s[5:1:-1] 得到 fedc
s[1:3] == s[slice(1,3)]? 內(nèi)置函數(shù)
字符串格式化
這里只介紹基本字符串格式化,擴(kuò)展在后續(xù)篇幅介紹%c 單個(gè)字符%d 十進(jìn)制整數(shù)%o 八進(jìn)制整數(shù)%s 字符串%x 十六進(jìn)制整數(shù),其中字母小寫(xiě)%X 十六進(jìn)制整數(shù),其中字母大寫(xiě)
>>> str = "so %s a day!"
>>> str % 'beautiful'
'so beautiful a day!'
>>> '{0} is {1}'.format('a','b')
'a is b'
>>> template = "{0}, {1} and {2}"
>>> template.format('a', 'b', 'c')
'a, b and c'
內(nèi)建函數(shù)列表
【字符串方法是python文本處理頭號(hào)工具】
string.capitalize()
字符串第一個(gè)字符大寫(xiě)
string.center(width,[,fill])
原字符居中,空格填充至width長(zhǎng)度
string.count(str,beg=0,end=len(string))
獲得字符串中某一個(gè)子串的數(shù)目,計(jì)算出現(xiàn)次數(shù),可指定范圍
string.decode(encoding='UTF-8',errors='strict')
解碼字符串,出錯(cuò)默認(rèn)報(bào)ValueError,除非errors是ignore或replace
string.encode(encoding='UTF-8',errors='strict')
string.endswith(suffix,beg=0,end=len(string))
是否以**結(jié)尾
string.expandtabs(tabsize=8)
把字符串中tab轉(zhuǎn)為空格,默認(rèn)8個(gè)
string.find(str,beg=0,end=len(stirng))
檢測(cè)是否包含str,存在返回開(kāi)始索引,否則返回-1
string.index(str,begin=0,end=len(string))
同find,不存在報(bào)異常,ValueError
string.isalnum()
至少一個(gè)字符,且所有字符均為字母或數(shù)字,True. 檢測(cè)字符串是否只包含0-9A-Za-z
string.isalpha()
至少一個(gè)字符,所有字符都是字母,True. 檢測(cè)字符串是否只包含字母
string.isdecimal()
只包含十進(jìn)制數(shù),True
stirng.isdigit()
只包含數(shù)字,True. 檢測(cè)字符串是否僅包含數(shù)字
string.islower()
至少一個(gè)區(qū)分大小寫(xiě)字符且所有字符小寫(xiě),True. 檢測(cè)字符串是否均為小寫(xiě)字母
string.isnumeric()
只含數(shù)字字符,True
string.isspace()
只包含空格,True. 檢測(cè)字符串是否均為空白字符
string.istitle()
標(biāo)題化字符,True. 檢測(cè)字符串中的單詞是否為首字母大寫(xiě)
string.isupper()
至少一個(gè)區(qū)分大小寫(xiě)字符且所有字符大寫(xiě),True. 檢測(cè)字符串是否均為大寫(xiě)字母
string.join(seq)
以string作為分隔符,seq中所有元素合并為新的字符串. 將原字符串插入?yún)?shù)字符串中的每?jī)蓚€(gè)字符之間
string.ljust(width)
返回一個(gè)原字符串左對(duì)齊,空格補(bǔ)充至長(zhǎng)度width
string.lower()
轉(zhuǎn)小寫(xiě). 將字符串全部轉(zhuǎn)為小寫(xiě)
string.lstrip()
截掉左側(cè)的空格
string.partition(str)
= find+split,從str出現(xiàn)第一個(gè)位置,截?cái)酁閜re_str,str,after_str元組,不含str則pre_str=strstring.replace(str1,str2,num=string.count(str1))替換,指定不超過(guò)num次,可作為模板實(shí)現(xiàn)
string.rfind(str,beg=0,end=len(string))
同find,右邊開(kāi)始
string.rindex(str,beg=0,end=len(string))
同index,右邊開(kāi)始
string.rjust(width)
右對(duì)齊,空格補(bǔ)齊
string.rpartition(str)
同partition,右邊開(kāi)始
string.rstrip([chars])
清理右側(cè)空白,包括換行符,返回處理后字符串
string.split(str=””, maxsplit =string.count(str))
以str切片,可指定分割次數(shù), 分割字符串,返回列表,默認(rèn)分隔符空格
string.splitlines(num=string.count(‘\n'))
s.splitlines([keepends])按行分隔,可指定分割次數(shù)
string.startswith(obj,beg=0,end=len(string))
以str開(kāi)頭,True. 檢測(cè)字符串是否以某一子串開(kāi)頭
string.strip([obj])
在string上執(zhí)行l(wèi)strip和rstrip
string.swapcase
反轉(zhuǎn)string中大小寫(xiě). 字符串中小寫(xiě)轉(zhuǎn)大寫(xiě),大寫(xiě)轉(zhuǎn)小寫(xiě)
string.title()
標(biāo)題花,單詞首字母大寫(xiě),其余小寫(xiě)
string.translate(str,del=””)
s.translate(table)根據(jù)str給出表轉(zhuǎn)換string字符,要過(guò)濾的字符放在del參數(shù)中
string.upper()
轉(zhuǎn)大寫(xiě). 將字符串全部轉(zhuǎn)為大寫(xiě)
string.zfill(width)
返回長(zhǎng)度width的字符串,原字符串右對(duì)齊,前面填充0
len(string)
獲取字符串的長(zhǎng)度
最佳實(shí)踐
1.循環(huán)中用到長(zhǎng)度
while i < len(stri):
#修改
size = len(stri)
while i < size
2.字符串追加
l = ['a', 'b']
result = ''
for i in l:
??? result += i
#修改
result = ''.join(l)
其他
1.轉(zhuǎn)義符
幾個(gè)常用:
\n換行,\\反斜杠
\t制表? \'單引號(hào)
\r回車(chē) \"雙引號(hào)
后續(xù)需擴(kuò)展
字符串編碼詳解
字符串格式化
正則表達(dá)式
字符串涉及常用模塊(序列化/文本包裝等)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
