字元串類型是python的序列類型,他的本質就是字元序列,而且python的字元串類型是不可以改變的,你無法将原字元串進行修改,但是可以将字元串的一部分複制到新的字元串中,來達到相同的修改效果。
建立字元串類型可以使用單引号或者雙引号又或者三引号來建立,執行個體如下:
單引号
<code>>> string </code><code>=</code> <code>'ansheng'</code>
<code># type是檢視一個變量的資料類型</code>
<code>>>> </code><code>type</code><code>(string)</code>
<code><</code><code>class</code> <code>'str'</code><code>></code>
雙引号
<code>>>> string </code><code>=</code> <code>"ansheng"</code>
<code>>>> </code><code>type</code><code>(string) </code>
三引号
<code>>>> string </code><code>=</code> <code>"""ansheng"""</code>
還可以指定類型
<code>>>> var</code><code>=</code><code>str</code><code>(</code><code>"string"</code><code>)</code>
<code>>>> var</code>
<code>'string'</code>
<code>>>> </code><code>type</code><code>(var)</code>
每個類的方法其實都是很多的,無論我們在學習的過程中個還是工作的時候,常用的其實沒有多少,是以我們沒必要去可以得記那麼多,有些方法我們隻需要對其有個印象就ok了,忘了的時候可以google一下。
首字母變大寫
capitalize(self):
<code>>>> name</code><code>=</code><code>"ansheng"</code>
<code>>>> name.capitalize()</code>
<code>'Ansheng'</code>
内容居中,width:字元串的總寬度;fillchar:填充字元,預設填充字元為空格。
center(self, width, fillchar=None):
<code># 定義一個字元串變量,名為"string",内容為"hello word"</code>
<code>>>> string</code><code>=</code><code>"hello word"</code>
<code># 輸出這個字元串的長度,用len(value_name)</code>
<code>>>> </code><code>len</code><code>(string)</code>
<code>10</code>
<code># 字元串的總寬度為10,填充的字元為"*"</code>
<code>>>> string.center(</code><code>10</code><code>,</code><code>"*"</code><code>)</code>
<code>'hello word'</code>
<code># 如果設定字元串的總産都為11,那麼減去字元串長度10還剩下一個位置,這個位置就會被*所占用</code>
<code>>>> string.center(</code><code>11</code><code>,</code><code>"*"</code><code>)</code>
<code>'*hello word'</code>
<code># 是從左到右開始填充</code>
<code>>>> string.center(</code><code>12</code><code>,</code><code>"*"</code><code>)</code>
<code>'*hello word*'</code>
統計字元串裡某個字元出現的次數,可選參數為在字元串搜尋的開始與結束位置。
count(self, sub, start=None, end=None):
參數
描述
sub
搜尋的子字元串;
start
字元串開始搜尋的位置。預設為第一個字元,第一個字元索引值為0;
end
字元串中結束搜尋的位置。字元中第一個字元的索引為 0。預設為字元串的最後一個位置;
<code># 預設搜尋出來的"l"是出現過兩次的</code>
<code>>>> string.count(</code><code>"l"</code><code>)</code>
<code>2</code>
<code># 如果指定從第三個位置開始搜尋,搜尋到第六個位置,"l"則出現過一次</code>
<code>>>> string.count(</code><code>"l"</code><code>,</code><code>3</code><code>,</code><code>6</code><code>)</code>
<code>1</code>
解碼
decode(self, encoding=None, errors=None):
<code># 定義一個變量内容為中文</code>
<code>temp </code><code>=</code> <code>"中文"</code>
<code># 把變量的字元集轉化為UTF-8</code>
<code>temp_unicode </code><code>=</code> <code>temp.decode(</code><code>"utf-8"</code><code>)</code>
編碼,針對unicode
encode(self, encoding=None, errors=None):
<code># 定義一個變量内容為中文,字元集為UTF-8</code>
<code>temp </code><code>=</code> <code>u</code><code>"中文"</code>
<code># 編碼,需要指定要轉換成什麼編碼</code>
<code>temp_gbk </code><code>=</code> <code>temp_unicode.encode(</code><code>"gbk"</code><code>)</code>
于判斷字元串是否以指定字尾結尾,如果以指定字尾結尾傳回True,否則傳回False。
endswith(self, suffix, start=None, end=None):
suffix
字尾,可能是一個字元串,或者也可能是尋找字尾的tuple
開始,切片從這裡開始
結束,片到此為止
<code># 判斷字元串中是否已"d"結尾,如果是則傳回"True"</code>
<code>>>> string.endswith(</code><code>"d"</code><code>)</code>
<code>True</code>
<code># 判斷字元串中是否已"t"結尾,不是則傳回"False"</code>
<code>>>> string.endswith(</code><code>"t"</code><code>)</code>
<code>False</code>
<code># 制定搜尋的位置,實則就是從字元串位置1到7來進行判斷,如果第七個位置是"d",則傳回True,否則傳回False</code>
<code>>>> string.endswith(</code><code>"d"</code><code>,</code><code>1</code><code>,</code><code>7</code><code>)</code>
把字元串中的tab符号(‘\t’)轉為空格,tab符号(‘\t’)預設的空格數是8。
expandtabs(self, tabsize=None):
tabsize
指定轉換字元串中的 tab 符号(‘\t’)轉為空格的字元數
<code>>>> string</code><code>=</code><code>"hello word"</code>
<code># 輸出變量"string"内容的時候會發現中間有一個"\t",這個其實就是一個`tab`鍵</code>
<code>>>> string</code>
<code>'hello\tword'</code>
<code># 把`tab`鍵換成一個空格</code>
<code>>>> string.expandtabs(</code><code>1</code><code>)</code>
<code># 把`tab`鍵換成十個空格</code>
<code>>>> string.expandtabs(</code><code>10</code><code>)</code>
<code>'hello word'</code>
檢測字元串中是否包含子字元串str,如果指定beg(開始)和end(結束)範圍,則檢查是否包含在指定範圍内,如果包含子字元串傳回開始的索引值,否則傳回-1。
find(self, sub, start=None, end=None):
str
指定檢索的字元串
beg
開始索引,預設為0
結束索引,預設為字元串的長度
<code># 傳回`o`在目前字元串中的位置,如果找到第一個`o`之後就不會再繼續往下面尋找了</code>
<code>>>> string.find(</code><code>"o"</code><code>)</code>
<code>4</code>
<code># 從第五個位置開始搜尋,傳回`o`所在的位置</code>
<code>>>> string.find(</code><code>"o"</code><code>,</code><code>5</code><code>)</code>
<code>7</code>
字元串格式,後續文章會提到。
format(args, *kwargs):
檢測字元串中是否包含子字元串 str ,如果指定 beg(開始) 和 end(結束) 範圍,則檢查是否包含在指定範圍内,該方法與 python find()方法一樣,隻不過如果str不在 string中會報一個異常。
index(self, sub, start=None, end=None):
<code># 傳回字元串所在的位置</code>
<code>>>> string.index(</code><code>"o"</code><code>)</code>
<code># 如果查找一個不存在的字元串那麼就會報錯</code>
<code>>>> string.index(</code><code>"a"</code><code>)</code>
<code>Traceback (most recent call last):</code>
<code> </code><code>File</code> <code>"<stdin>"</code><code>, line </code><code>1</code><code>, </code><code>in</code> <code><module></code>
<code>ValueError: substring </code><code>not</code> <code>found</code>
法檢測字元串是否由字母和數字組成,如果string至少有一個字元并且所有字元都是字母或數字則傳回True,否則傳回False
isalnum(self):
<code>>>> string</code><code>=</code><code>"hes2323"</code>
<code># 如果存在數字或字母就傳回`True`,否則傳回`False`</code>
<code>>>> string.isalnum()</code>
<code># 中間有空格傳回的就是False了</code>
檢測字元串是否隻由字母組成。
isalpha(self):
<code># 如果全部都是字母就傳回`True`</code>
<code>>>> string</code><code>=</code><code>"helloword"</code>
<code>>>> string.isalpha()</code>
<code># 否則就傳回False</code>
檢測字元串是否隻由數字組成
isdigit(self):
<code># 如果變量裡面都是數字就傳回`True`,否則就傳回`False`</code>
<code>>>> string.isdigit()</code>
<code>>>> string</code><code>=</code><code>"2323"</code>
檢測字元串是否由小寫字母組成
islower(self):
<code># 如果變量内容全部都是小寫字母就傳回`True`,否則就傳回`False`</code>
<code>>>> string</code><code>=</code><code>"hesasdasd"</code>
<code>>>> string.islower()</code>
<code>>>> string</code><code>=</code><code>"HelloWord"</code>
檢測字元串是否隻由空格組成
isspace(self):
<code># 如果變量内容由空格來組成,那麼就傳回`True`否則就傳回`False`</code>
<code>>>> string</code><code>=</code><code>" "</code>
<code>>>> string.isspace()</code>
<code>>>> string</code><code>=</code><code>"a"</code>
檢測字元串中所有的單詞拼寫首字母是否為大寫,且其他字母為小寫。
istitle(self):
<code># 如果變量的内容首字母是大寫并且其他字母為小寫,那麼就傳回`True`,否則會傳回`False`</code>
<code>>>> string</code><code>=</code><code>"Hello Word"</code>
<code>>>> string.istitle()</code>
<code>>>> string</code><code>=</code><code>"Hello word"</code>
檢測字元串中所有的字母是否都為大寫。
isupper(self):
<code># 如果變量值中所有的字母都是大寫就傳回`True`,否則就傳回`False`</code>
<code>>>> string.isupper()</code>
<code>>>> string</code><code>=</code><code>"HELLO WORD"</code>
将序列中的元素以指定的字元連接配接生成一個新的字元串。
join(self, iterable):
<code>>>> string</code><code>=</code><code>(</code><code>"a"</code><code>,</code><code>"b"</code><code>,</code><code>"c"</code><code>)</code>
<code>>>> </code><code>'-'</code><code>.join(string)</code>
<code>'a-b-c'</code>
傳回一個原字元串左對齊,并使用空格填充至指定長度的新字元串。如果指定的長度小于原字元串的長度則傳回原字元串。
ljust(self, width, fillchar=None):
width
指定字元串長度
fillchar
填充字元,預設為空格
<code>>>> string</code><code>=</code><code>"helo word"</code>
<code>9</code>
<code># 定義的長度減去字元串的長度,剩下的就開始填充</code>
<code>>>> string.ljust(</code><code>15</code><code>,</code><code>'*'</code><code>)</code>
<code>'helo word******'</code>
轉換字元串中所有大寫字元為小寫。
lower(self):
<code># 把變量裡的大寫全部轉換成小寫</code>
<code>>>> string</code><code>=</code><code>"Hello WORD"</code>
<code>>>> string.lower()</code>
截掉字元串左邊的空格或指定字元
lstrip(self, chars=None):
chars
指定截取的字元
<code># 從左側開始删除比對的字元串</code>
<code>>>> string.lstrip(</code><code>"hello "</code><code>)</code>
<code>'word'</code>
用來根據指定的分隔符将字元串進行分割,如果字元串包含指定的分隔符,則傳回一個3元的tuple,第一個為分隔符左邊的子串,第二個為分隔符本身,第三個為分隔符右邊的子串。
partition(self, sep):
指定的分隔符
<code># 傳回的是一個元組類型</code>
<code>>>> string</code><code>=</code><code>"www.ansheng.me"</code>
<code>>>> string.partition(</code><code>"ansheng"</code><code>)</code>
<code>(</code><code>'www.'</code><code>, </code><code>'ansheng'</code><code>, </code><code>'.me'</code><code>)</code>
把字元串中的 old(舊字元串)替換成new(新字元串),如果指定第三個參數max,則替換不超過max次
replace(self, old, new, count=None):
old
将被替換的子字元串
new
新字元串,用于替換old子字元串
count
可選字元串, 替換不超過count次
<code># 把就字元串`www.`換成新字元串`https://`</code>
<code>>>> string.replace(</code><code>"www."</code><code>,</code><code>"https://"</code><code>)</code>
<code>'https://blog.ansheng.me'</code>
<code># 就字元串`w`換成新字元串`a`隻替換`2`次</code>
<code>>>> string.replace(</code><code>"w"</code><code>,</code><code>"a"</code><code>,</code><code>2</code><code>)</code>
<code>'aaw.ansheng.me'</code>
傳回字元串最後一次出現的位置,如果沒有比對項則傳回-1。
rfind(self, sub, start=None, end=None):
查找的字元串
開始查找的位置,預設為0
結束查找位置,預設為字元串的長度
<code># rfind其實就是反向查找</code>
<code>>>> string.rfind(</code><code>"o"</code><code>)</code>
<code># 指定查找的範圍</code>
<code>>>> string.rfind(</code><code>"o"</code><code>,</code><code>0</code><code>,</code><code>6</code><code>)</code>
傳回子字元串str在字元串中最後出現的位置,如果沒有比對的字元串會報異常,你可以指定可選參數<code>[beg:end]</code>設定查找的區間。
rindex(self, sub, start=None, end=None):
<code># 反向查找索引</code>
<code>>>> string.rindex(</code><code>"o"</code><code>)</code>
<code># 如果沒有查找到就報錯</code>
<code>>>> string.rindex(</code><code>"a"</code><code>)</code>
傳回一個原字元串右對齊,并使用空格填充至長度 width 的新字元串。如果指定的長度小于字元串的長度則傳回原字元串。
rjust(self, width, fillchar=None):
指定填充指定字元後中字元串的總長度
填充的字元,預設為空格
<code>>>> string.rjust(</code><code>10</code><code>,</code><code>"*"</code><code>)</code>
<code>>>> string.rjust(</code><code>12</code><code>,</code><code>"*"</code><code>)</code>
<code>'**hello word'</code>
從右到左通過指定分隔符對字元串進行切片,如果參數num有指定值,則僅分隔num個子字元串
rsplit(self, sep=None, maxsplit=None):
隔符,預設為空格
num
分割次數
<code>>>> string.rsplit(</code><code>"."</code><code>,</code><code>1</code><code>)</code>
<code>[</code><code>'www.ansheng'</code><code>, </code><code>'me'</code><code>]</code>
<code>>>> string.rsplit(</code><code>"."</code><code>,</code><code>2</code><code>)</code>
<code>[</code><code>'www'</code><code>, </code><code>'ansheng'</code><code>, </code><code>'me'</code><code>]</code>
删除string字元串末尾的指定字元(預設為空格).
rstrip(self, chars=None):
指定删除的字元
<code># 從尾部開始比對删除</code>
<code>>>> string.rstrip(</code><code>"d"</code><code>)</code>
<code>'hello wor'</code>
從左到右通過指定分隔符對字元串進行切片,如果參數num有指定值,則僅分隔num個子字元串
split(self, sep=None, maxsplit=None):
分隔符,預設為空格
<code># 指定切一次,以`.`來分割</code>
<code>>>> string.split(</code><code>"."</code><code>,</code><code>1</code><code>)</code>
<code>[</code><code>'www'</code><code>, </code><code>'ansheng.me'</code><code>]</code>
<code># 指定切二次,以`.`來分割</code>
<code>>>> string.split(</code><code>"."</code><code>,</code><code>2</code><code>)</code>
按照行分隔,傳回一個包含各行作為元素的清單,如果num指定則僅切片num個行.
splitlines(self, keepends=False):
分割行的次數
<code># 定義一個有換行的變量,`\n`可以劃行</code>
<code>>>> string</code><code>=</code><code>"www\nansheng\nme"</code>
<code># 輸出内容</code>
<code>>>> </code><code>print</code><code>(string)</code>
<code>www</code>
<code>ansheng</code>
<code>me</code>
<code># 把有行的轉換成一個清單</code>
<code>>>> string.splitlines(</code><code>1</code><code>)</code>
<code>[</code><code>'www\n'</code><code>, </code><code>'ansheng\n'</code><code>, </code><code>'me'</code><code>]</code>
檢查字元串是否是以指定子字元串開頭,如果是則傳回 True,否則傳回 False。如果參數 beg 和 end 指定值,則在指定範圍内檢查。
startswith(self, prefix, start=None, end=None):
檢測的字元串
strbeg
可選參數用于設定字元串檢測的起始位置
strend
可選參數用于設定字元串檢測的結束位置
<code>>>> string.startswith(</code><code>"www"</code><code>)</code>
<code>>>> string.startswith(</code><code>"www"</code><code>,</code><code>3</code><code>)</code>
移除字元串頭尾指定的字元(預設為空格)
strip(self, chars=None):
移除字元串頭尾指定的字元
<code>>>> string</code><code>=</code><code>" www.ansheng.me "</code>
<code>' www.ansheng.me '</code>
<code># 删除空格</code>
<code>>>> string.strip()</code>
<code>'www.ansheng.me'</code>
<code>>>> string</code><code>=</code><code>"_www.ansheng.me_"</code>
<code># 指定要把左右兩邊的"_"删除掉</code>
<code>>>> string.strip(</code><code>"_"</code><code>)</code>
用于對字元串的大小寫字母進行轉換,大寫變小寫,小寫變大寫
swapcase(self):
<code>>>> string</code><code>=</code><code>"hello WORD"</code>
<code>>>> string.swapcase()</code>
<code>'HELLO word'</code>
傳回”标題化”的字元串,就是說所有單詞都是以大寫開始,其餘字母均為小寫。
title(self):
<code>>>> string.title()</code>
<code>'Hello Word'</code>
根據參數table給出的表(包含 256 個字元)轉換字元串的字元, 要過濾掉的字元放到 del 參數中。
translate(self, table, deletechars=None):
table
翻譯表,翻譯表是通過maketrans方法轉換而來
deletechars
字元串中要過濾的字元清單
将字元串中的小寫字母轉為大寫字母
upper(self):
<code>>>> string.upper()</code>
<code>'HELLO WORD'</code>
傳回指定長度的字元串,原字元串右對齊,前面填充0
zfill(self, width):
指定字元串的長度。原字元串右對齊,前面填充0
<code>>>> string.zfill(</code><code>10</code><code>)</code>
<code>>>> string.zfill(</code><code>20</code><code>)</code>
<code>'0000000000hello word'</code>
以UTF-8編碼的時候,一個漢字是三個位元組,一個位元組是八位
3.5.x執行個體
代碼如下:
<code>#!/usr/bin/env python</code>
<code># _*_ coding:utf-8 _*_</code>
<code>var </code><code>=</code> <code>"中文"</code>
<code>for</code> <code>n </code><code>in</code> <code>var:</code>
<code> </code><code>print</code><code>(n)</code>
<code>print</code><code>(</code><code>"================"</code><code>)</code>
<code>var2 </code><code>=</code> <code>"zhongwen"</code>
<code>for</code> <code>n </code><code>in</code> <code>var2:</code>
執行結果:
<code>C:\Python35\python.exe F:</code><code>/</code><code>Python_code</code><code>/</code><code>sublime</code><code>/</code><code>Day03</code><code>/</code><code>str</code><code>.py</code>
<code>中</code>
<code>文</code>
<code>=</code><code>=</code><code>=</code><code>=</code><code>=</code><code>=</code><code>=</code><code>=</code><code>=</code><code>=</code><code>=</code><code>=</code><code>=</code><code>=</code><code>=</code><code>=</code>
<code>z</code>
<code>h</code>
<code>o</code>
<code>n</code>
<code>g</code>
<code>w</code>
<code>e</code>
2.7.x執行個體
執行結果
<code>C:\Python27\python.exe F:</code><code>/</code><code>Python_code</code><code>/</code><code>sublime</code><code>/</code><code>Day03</code><code>/</code><code>str</code><code>.py</code>
通過上面的執行個體可以知道,<code>Python3.5.x</code>在輸出中文或者英文的時候是按照一個字元一個字元來輸出的,但是在<code>Python2.7.x</code>就不這樣了,<code>Python2.7.x</code>是按照位元組來進行輸出的,可以看到在輸出中文的時候是亂碼的,而且還輸出了六次,因為在UTF-8編碼的情況下一個漢字是等于三個位元組的,是以輸出了六個亂碼的字元。
在Python3.5.x裡面是既可以輸出漢字,也可以把輸出位元組的,利用bytes這個方法,bytes可以将字元串轉換為位元組
<code>var</code><code>=</code><code>"中文"</code>
<code> </code><code>bytes_list </code><code>=</code> <code>bytes(n, encoding</code><code>=</code><code>'utf-8'</code><code>)</code>
<code> </code><code># 十六進制輸出</code>
<code> </code><code>print</code><code>(bytes_list)</code>
<code> </code><code>for</code> <code>x </code><code>in</code> <code>bytes_list:</code>
<code> </code><code># 十進制,bin(x)二進制</code>
<code> </code><code>print</code><code>(x,</code><code>bin</code><code>(x))</code>
輸出的結果
<code># 字元串</code>
<code># 十六進制</code>
<code>b</code><code>'\xe4\xb8\xad'</code>
<code># 228=十進制,0b11100100=二進制</code>
<code>228</code> <code>0b11100100</code>
<code>184</code> <code>0b10111000</code>
<code>173</code> <code>0b10101101</code>
<code>b</code><code>'\xe6\x96\x87'</code>
<code>230</code> <code>0b11100110</code>
<code>150</code> <code>0b10010110</code>
<code>135</code> <code>0b10000111</code>
b代表十六進制,\xe4這樣的是一個十六進制的位元組
索引是指某個值在清單或别的資料類型中的一個位置
定義一個清單,檢視清單中<code>Linux</code>值對應在清單中的位置
<code>>>> list_os </code><code>=</code> <code>[</code><code>"Windows"</code><code>,</code><code>"Linux"</code><code>,</code><code>"Mac"</code><code>,</code><code>"Unix"</code><code>]</code>
<code>>>> list_os.index(</code><code>"Linux"</code><code>)</code>
<code>>>> list_os[</code><code>1</code><code>]</code>
<code>'Linux'</code>
Python允許你對某些字元進行轉義,以此來實作一些難以單純用字元描述的效果
<code># 常用的内容也轉義也就是`\n`和`\t`了,`\n`是用來換行的,`\t`是用來代替一個`tab`鍵</code>
<code>>>> string</code><code>=</code><code>"My \n Name \t is"</code>
<code>My</code>
<code> </code><code>Name </code><code>is</code>
你可以使用<code>+</code>号将多個字元串或字元串變量拼接起來
<code>>>> a</code><code>=</code><code>"my "</code>
<code>>>> b</code><code>=</code><code>"name "</code>
<code>>>> c</code><code>=</code><code>"is "</code>
<code>>>> d</code><code>=</code><code>"ansheng"</code>
<code>>>> a</code><code>+</code><code>b</code><code>+</code><code>c</code><code>+</code><code>d</code>
<code>'my name is ansheng'</code>
切片操作符是序列名後跟一個方括号,方括号中有一對可選的數字,并用冒号分割。注意這與你使用的索引操作符十分相似。記住數是可選的,而冒号是必須的,切片操作符中的第一個數表示切片開始的位置,第二個數表示切片到哪裡結束,第三個數表示切片間隔數。如果不指定第一個數,Python就從序列首開始。如果沒有指定第二個數,則Python會停止在序列尾。注意,傳回的序列從開始位置開始 ,剛好在結束位置之前結束。即開始位置是包含在序列切片中的,而結束位置被排斥在切片外。
<code>>>> os</code><code>=</code><code>"Linux"</code>
<code>>>> os</code>
<code>>>> os[</code><code>0</code><code>:</code><code>2</code><code>]</code>
<code>'Li'</code>
<code>>>> os[</code><code>0</code><code>:</code><code>4</code><code>:</code><code>2</code><code>]</code>
<code>'Ln'</code>
更多執行個體如下
切片符
說明
[:]
提取從開頭到結尾的整個字元串
[start:]
從start到結尾的字元串
[:end]
從開頭提取到end - 1
[start:end]
從start提取到end - 1
[start : end : setp]
從start提取到end-1,每setp個字元提取一個
索引和切片同時适用于字元串、清單與元組
索引通常用于查找某一個字元串或值
切片通常用于查找某一個範圍内的字元串或值
執行個體:
<code># 定義一個清單,清單内有三個元素</code>
<code>>>> var</code><code>=</code><code>[</code><code>"Linux"</code><code>,</code><code>"Win"</code><code>,</code><code>"Unix"</code><code>]</code>
<code># 通過索引取到了一個值</code>
<code>>>> var[</code><code>0</code><code>]</code>
<code># 通過切片取到了多個值</code>
<code>>>> var[</code><code>0</code><code>:</code><code>2</code><code>]</code>
<code>[</code><code>'Linux'</code><code>, </code><code>'Win'</code><code>]</code>
<code>>>> var[</code><code>1</code><code>:</code><code>3</code><code>]</code>
<code>[</code><code>'Win'</code><code>, </code><code>'Unix'</code><code>]</code>
本文轉自 Edenwy 51CTO部落格,原文連結:http://blog.51cto.com/edeny/1910785,如需轉載請自行聯系原作者