Python全棧之路系列之字符串數據類型

ou378346 7年前發布 | 14K 次閱讀 Python 操作系統 Python開發

字符串(str)

字符串類型是python的序列類型,他的本質就是字符序列,而且python的字符串類型是不可以改變的,你無法將原字符串進行修改,但是可以將字符串的一部分復制到新的字符串中,來達到相同的修改效果。

創建字符串類型可以使用單引號或者雙引號又或者三引號來創建,實例如下:

單引號

>>> string = 'ansheng'

type是查看一個變量的數據類型

>>> type(string) <class 'str'></code></pre>

雙引號

>>> string = "ansheng"

type是查看一個變量的數據類型

>>> type(string) <class 'str'></code></pre>

三引號

>>> string = """ansheng"""
>>> type(string)
<class 'str'>

還可以指定類型

>>> var=str("string")
>>> var
'string'
>>> type(var)
<class 'str'>

字符串方法

每個類的方法其實都是很多的,無論我們在學習的過程中個還是工作的時候,常用的其實沒有多少,所以我們沒必要去可以得記那么多,有些方法我們只需要對其有個印象就ok了,忘了的時候可以google一下。

首字母變大寫

capitalize(self):

>>> name="ansheng"
>>> name.capitalize()
'Ansheng'

內容居中,width:字符串的總寬度;fillchar:填充字符,默認填充字符為空格。

center(self, width, fillchar=None):

# 定義一個字符串變量,名為"string",內容為"hello word"
>>> string="hello word"

輸出這個字符串的長度,用len(value_name)

>>> len(string) 10

字符串的總寬度為10,填充的字符為"*"

>>> string.center(10,"*") 'hello word'

如果設置字符串的總產都為11,那么減去字符串長度10還剩下一個位置,這個位置就會被*所占用

>>> string.center(11,"") 'hello word'

是從左到右開始填充

>>> string.center(12,"") 'hello word*'</code></pre>

統計字符串里某個字符出現的次數,可選參數為在字符串搜索的開始與結束位置。

count(self, sub, start=None, end=None):

參數 描述
sub 搜索的子字符串;
start 字符串開始搜索的位置。默認為第一個字符,第一個字符索引值為0;
end 字符串中結束搜索的位置。字符中第一個字符的索引為 0。默認為字符串的最后一個位置;
>>> string="hello word"

默認搜索出來的"l"是出現過兩次的

>>> string.count("l") 2

如果指定從第三個位置開始搜索,搜索到第六個位置,"l"則出現過一次

>>> string.count("l",3,6) 1</code></pre>

解碼

decode(self, encoding=None, errors=None):

# 定義一個變量內容為中文
temp = "中文"

把變量的字符集轉化為UTF-8

temp_unicode = temp.decode("utf-8")</code></pre>

編碼,針對unicode

encode(self, encoding=None, errors=None):

# 定義一個變量內容為中文,字符集為UTF-8
temp = u"中文"

編碼,需要指定要轉換成什么編碼

temp_gbk = temp_unicode.encode("gbk")</code></pre>

于判斷字符串是否以指定后綴結尾,如果以指定后綴結尾返回True,否則返回False。

endswith(self, suffix, start=None, end=None):

參數 描述
suffix 后綴,可能是一個字符串,或者也可能是尋找后綴的tuple
start 開始,切片從這里開始
end 結束,片到此為止
>>> string="hello word"

判斷字符串中是否已"d"結尾,如果是則返回"True"

>>> string.endswith("d") True

判斷字符串中是否已"t"結尾,不是則返回"False"

>>> string.endswith("t") False

制定搜索的位置,實則就是從字符串位置1到7來進行判斷,如果第七個位置是"d",則返回True,否則返回False

>>> string.endswith("d",1,7) False</code></pre>

把字符串中的tab符號('t')轉為空格,tab符號('t')默認的空格數是8。

expandtabs(self, tabsize=None):

參數 描述
tabsize 指定轉換字符串中的 tab 符號('t')轉為空格的字符數
>>> string="hello       word"

輸出變量"string"內容的時候會發現中間有一個"\t",這個其實就是一個tab

>>> string 'hello\tword'

tab鍵換成一個空格

>>> string.expandtabs(1) 'hello word'

tab鍵換成十個空格

>>> string.expandtabs(10) 'hello word'</code></pre>

檢測字符串中是否包含子字符串str,如果指定beg(開始)和end(結束)范圍,則檢查是否包含在指定范圍內,如果包含子字符串返回開始的索引值,否則返回-1。

find(self, sub, start=None, end=None):

參數 描述
str 指定檢索的字符串
beg 開始索引,默認為0
end 結束索引,默認為字符串的長度
>>> string="hello word"

返回o在當前字符串中的位置,如果找到第一個o之后就不會再繼續往下面尋找了

>>> string.find("o") 4

從第五個位置開始搜索,返回o所在的位置

>>> string.find("o",5) 7</code></pre>

字符串格式,后續文章會提到。

format( args, *kwargs):

檢測字符串中是否包含子字符串 str ,如果指定 beg(開始) 和 end(結束) 范圍,則檢查是否包含在指定范圍內,該方法與 python find()方法一樣,只不過如果str不在 string中會報一個異常。

index(self, sub, start=None, end=None):

參數 描述
str 指定檢索的字符串
beg 開始索引,默認為0
end 結束索引,默認為字符串的長度
>>> string="hello word"

返回字符串所在的位置

>>> string.index("o") 4

如果查找一個不存在的字符串那么就會報錯

>>> string.index("a") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: substring not found</code></pre>

法檢測字符串是否由字母和數字組成,如果string至少有一個字符并且所有字符都是字母或數字則返回True,否則返回False

isalnum(self):

>>> string="hes2323"

如果存在數字或字母就返回True,否則返回False

>>> string.isalnum() True

中間有空格返回的就是False了

>>> string="hello word" >>> string.isalnum() False</code></pre>

檢測字符串是否只由字母組成。

isalpha(self):

# 如果全部都是字母就返回True
>>> string="helloword"
>>> string.isalpha()
True

否則就返回False

>>> string="hes2323" >>> string.isalpha() False</code></pre>

檢測字符串是否只由數字組成

isdigit(self):

# 如果變量里面都是數字就返回`True`,否則就返回`False`
>>> string="hes2323"
>>> string.isdigit()
False
>>> string="2323"
>>> string.isdigit()
True

檢測字符串是否由小寫字母組成

islower(self):

# 如果變量內容全部都是小寫字母就返回`True`,否則就返回`False`
>>> string="hesasdasd"
>>> string.islower()
True
>>> string="HelloWord"
>>> string.islower()
False

檢測字符串是否只由空格組成

isspace(self):

# 如果變量內容由空格來組成,那么就返回`True`否則就返回`False`
>>> string=" "
>>> string.isspace()
True
>>> string="a"
>>> string.isspace()
False

檢測字符串中所有的單詞拼寫首字母是否為大寫,且其他字母為小寫。

istitle(self):

# 如果變量的內容首字母是大寫并且其他字母為小寫,那么就返回`True`,否則會返回`False`
>>> string="Hello Word"
>>> string.istitle()
True
>>> string="Hello word"
>>> string.istitle()
False

檢測字符串中所有的字母是否都為大寫。

isupper(self):

# 如果變量值中所有的字母都是大寫就返回`True`,否則就返回`False`
>>> string="hello word"
>>> string.isupper()
False
>>> string="HELLO WORD"
>>> string.isupper()
True

將序列中的元素以指定的字符連接生成一個新的字符串。

join(self, iterable):

>>> string=("a","b","c")
>>> '-'.join(string)
'a-b-c'

返回一個原字符串左對齊,并使用空格填充至指定長度的新字符串。如果指定的長度小于原字符串的長度則返回原字符串。

ljust(self, width, fillchar=None):

參數 描述
width 指定字符串長度
fillchar 填充字符,默認為空格
>>> string="helo word"
>>> len(string)
9

定義的長度減去字符串的長度,剩下的就開始填充

>>> string.ljust(15,'*') 'helo word**'</code></pre>

轉換字符串中所有大寫字符為小寫。

lower(self):

# 把變量里的大寫全部轉換成小寫
>>> string="Hello WORD"
>>> string.lower()
'hello word'

截掉字符串左邊的空格或指定字符

lstrip(self, chars=None):

參數 描述
chars 指定截取的字符
# 從左側開始刪除匹配的字符串
>>> string="hello word"
>>> string.lstrip("hello ")
'word'

用來根據指定的分隔符將字符串進行分割,如果字符串包含指定的分隔符,則返回一個3元的tuple,第一個為分隔符左邊的子串,第二個為分隔符本身,第三個為分隔符右邊的子串。

partition(self, sep):

參數 描述
str 指定的分隔符
# 返回的是一個元組類型
>>> string="www.ansheng.me"
>>> string.partition("ansheng")
('www.', 'ansheng', '.me')

把字符串中的 old(舊字符串)替換成new(新字符串),如果指定第三個參數max,則替換不超過max次

replace(self, old, new, count=None):

參數 描述
old 將被替換的子字符串
new 新字符串,用于替換old子字符串
count 可選字符串, 替換不超過count次
>>> string="www.ansheng.me"

把就字符串www.換成新字符串https://

>>> string.replace("www.","https://") '

就字符串w換成新字符串a只替換2

>>> string.replace("w","a",2) 'aaw.ansheng.me'</code></pre>

返回字符串最后一次出現的位置,如果沒有匹配項則返回-1。

rfind(self, sub, start=None, end=None):

參數 描述
str 查找的字符串
beg 開始查找的位置,默認為0
end 結束查找位置,默認為字符串的長度
>>> string="hello word"

rfind其實就是反向查找

>>> string.rfind("o") 7

指定查找的范圍

>>> string.rfind("o",0,6) 4</code></pre>

返回子字符串str在字符串中最后出現的位置,如果沒有匹配的字符串會報異常,你可以指定可選參數 [beg:end] 設置查找的區間。

rindex(self, sub, start=None, end=None):

參數 描述
str 查找的字符串
beg 開始查找的位置,默認為0
end 結束查找位置,默認為字符串的長度
>>> string="hello word"

反向查找索引

>>> string.rindex("o") 7

如果沒有查找到就報錯

>>> string.rindex("a") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: substring not found</code></pre>

返回一個原字符串右對齊,并使用空格填充至長度 width 的新字符串。如果指定的長度小于字符串的長度則返回原字符串。

rjust(self, width, fillchar=None):

參數 描述
width 指定填充指定字符后中字符串的總長度
fillchar 填充的字符,默認為空格
>>> string="hello word"
>>> len(string)
10
>>> string.rjust(10,"*")
'hello word'
>>> string.rjust(12,"*")
'**hello word'

從右到左通過指定分隔符對字符串進行切片,如果參數num有指定值,則僅分隔num個子字符串

rsplit(self, sep=None, maxsplit=None):

參數 描述
str 隔符,默認為空格
num 分割次數
>>> string="www.ansheng.me"
>>> string.rsplit(".",1)
['www.ansheng', 'me']
>>> string.rsplit(".",2)
['www', 'ansheng', 'me']

刪除string字符串末尾的指定字符(默認為空格).

rstrip(self, chars=None):

參數 描述
chars 指定刪除的字符
# 從尾部開始匹配刪除
>>> string="hello word"
>>> string.rstrip("d")
'hello wor'

從左到右通過指定分隔符對字符串進行切片,如果參數num有指定值,則僅分隔num個子字符串

split(self, sep=None, maxsplit=None):

參數 描述
str 分隔符,默認為空格
num 分割次數
>>> string="www.ansheng.me"

指定切一次,以.來分割

>>> string.split(".",1) ['www', 'ansheng.me']

指定切二次,以.來分割

>>> string.split(".",2) ['www', 'ansheng', 'me']</code></pre>

按照行分隔,返回一個包含各行作為元素的列表,如果num指定則僅切片num個行.

splitlines(self, keepends=False):

參數 描述
num 分割行的次數
# 定義一個有換行的變量,\n可以劃行
>>> string="www\nansheng\nme"

輸出內容

>>> print(string) www ansheng me

把有行的轉換成一個列表

>>> string.splitlines(1) ['www\n', 'ansheng\n', 'me']</code></pre>

檢查字符串是否是以指定子字符串開頭,如果是則返回 True,否則返回 False。如果參數 beg 和 end 指定值,則在指定范圍內檢查。

startswith(self, prefix, start=None, end=None):

參數 描述
str 檢測的字符串
strbeg 可選參數用于設置字符串檢測的起始位置
strend 可選參數用于設置字符串檢測的結束位置
>>> string="www.ansheng.me"
>>> string.startswith("www")
True
>>> string.startswith("www",3)
False

移除字符串頭尾指定的字符(默認為空格)

strip(self, chars=None):

參數 描述
chars 移除字符串頭尾指定的字符
>>> string=" www.ansheng.me "
>>> string
' www.ansheng.me '

刪除空格

>>> string.strip() 'www.ansheng.me' >>> string="www.ansheng.me"

指定要把左右兩邊的"_"刪除掉

>>> string.strip("_") 'www.ansheng.me'</code></pre>

用于對字符串的大小寫字母進行轉換,大寫變小寫,小寫變大寫

swapcase(self):

>>> string="hello WORD"
>>> string.swapcase()
'HELLO word'

返回"標題化"的字符串,就是說所有單詞都是以大寫開始,其余字母均為小寫。

title(self):

>>> string="hello word"
>>> string.title()
'Hello Word'

根據參數table給出的表(包含 256 個字符)轉換字符串的字符, 要過濾掉的字符放到 del 參數中。

translate(self, table, deletechars=None):

參數 描述
table 翻譯表,翻譯表是通過maketrans方法轉換而來
deletechars 字符串中要過濾的字符列表

將字符串中的小寫字母轉為大寫字母

upper(self):

>>> string="hello word"
>>> string.upper()
'HELLO WORD'

返回指定長度的字符串,原字符串右對齊,前面填充0

zfill(self, width):

參數 描述
width 指定字符串的長度。原字符串右對齊,前面填充0
>>> string="hello word"
>>> string.zfill(10)
'hello word'
>>> string.zfill(20)
'0000000000hello word'

去除值得兩端空格

>>> var=" ansheng "
>>> var
' ansheng '
>>> var.strip()
'ansheng'

str類型和bytes類型轉換

以UTF-8編碼的時候,一個漢字是三個字節,一個字節是八位

3.5.x實例

代碼如下:

#!/usr/bin/env python

* coding:utf-8 *

var = "中文" for n in var: print(n)

print("================")

var2 = "zhongwen" for n in var2: print(n)</code></pre>

執行結果:

C:\Python35\python.exe F:/Python_code/sublime/Day03/str.py
中

z h o n g w e n</code></pre>

2.7.x實例

代碼如下:

#!/usr/bin/env python

* coding:utf-8 *

var = "中文" for n in var: print(n)

print("================")

var2 = "zhongwen" for n in var2: print(n)</code></pre>

執行結果

C:\Python27\python.exe F:/Python_code/sublime/Day03/str.py
?
?
?
?
?

?

z h o n g w e n</code></pre>

通過上面的實例可以知道, Python3.5.x 在輸出中文或者英文的時候是按照一個字符一個字符來輸出的,但是在 Python2.7.x 就不這樣了, Python2.7.x 是按照字節來進行輸出的,可以看到在輸出中文的時候是亂碼的,而且還輸出了六次,因為在UTF-8編碼的情況下一個漢字是等于三個字節的,所以輸出了六個亂碼的字符。

在Python3.5.x里面是既可以輸出漢字,也可以把輸出字節的,利用bytes這個方法,bytes可以將字符串轉換為字節

var="中文"
for n in var:
    print(n)
    bytes_list = bytes(n, encoding='utf-8')

# 十六進制輸出
print(bytes_list)
for x in bytes_list:
    # 十進制,bin(x)二進制
    print(x,bin(x))</code></pre> 

輸出的結果

# 字符串
中
# 十六進制
b'\xe4\xb8\xad'
# 228=十進制,0b11100100=二進制
228 0b11100100
184 0b10111000
173 0b10101101
文
b'\xe6\x96\x87'
230 0b11100110
150 0b10010110
135 0b10000111

b代表十六進制,xe4這樣的是一個十六進制的字節

其他知識點

索引

索引是指某個值在列表或別的數據類型中的一個位置

定義一個列表,查看列表中 Linux 值對應在列表中的位置

>>> list_os = ["Windows","Linux","Mac","Unix"]
>>> list_os.index("Linux")
1
>>> list_os[1]
'Linux'

使用 \ 轉義

Python允許你對某些字符進行轉義,以此來實現一些難以單純用字符描述的效果

# 常用的內容也轉義也就是`\n`和`\t`了,`\n`是用來換行的,`\t`是用來代替一個`tab`鍵
>>> string="My \n Name  \t is"
>>> print(string)
My
 Name    is

使用 + 拼接

你可以使用 + 號將多個字符串或字符串變量拼接起來

>>> a="my "
>>> b="name "
>>> c="is "
>>> d="ansheng"
>>> a+b+c+d
'my name is ansheng'

切片

切片操作符是序列名后跟一個方括號,方括號中有一對可選的數字,并用冒號分割。注意這與你使用的索引操作符十分相似。記住數是可選的,而冒號是必須的,切片操作符中的第一個數表示切片開始的位置,第二個數表示切片到哪里結束,第三個數表示切片間隔數。如果不指定第一個數,Python就從序列首開始。如果沒有指定第二個數,則Python會停止在序列尾。注意,返回的序列從開始位置開始 ,剛好在結束位置之前結束。即開始位置是包含在序列切片中的,而結束位置被排斥在切片外。

>>> os="Linux"
>>> os
'Linux'
>>> os[0:2]
'Li'
>>> os[0:4:2]
'Ln'

更多實例如下

切片符 說明
[:] 提取從開頭到結尾的整個字符串
[start:] 從start到結尾的字符串
[:end] 從開頭提取到end - 1
[start:end] 從start提取到end - 1
[startsetp] 從start提取到end-1,每setp個字符提取一個

索引和切片同時適用于字符串、列表與元組

  1. 索引通常用于查找某一個字符串或值

  2. 切片通常用于查找某一個范圍內的字符串或值

實例:

# 定義一個列表,列表內有三個元素
>>> var=["Linux","Win","Unix"]
# 通過索引取到了一個值
>>> var[0]
'Linux'
# 通過切片取到了多個值
>>> var[0:2]
['Linux', 'Win']
>>> var[1:3]
['Win', 'Unix']

 

 

來自:https://segmentfault.com/a/1190000008078178

 

 本文由用戶 ou378346 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!