12.1-創建字符串:
第一種方式:
>>> s = "hello world"
>>> type(s)
<class 'str'>
第二種方式:
>>> s = str("hello world")
>>> type(s)
<class 'str'>
12.2-字符串(str)內部方法介紹:
capitalize(self):
說明:首字母變大寫。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abc"
# capitalize() 表示首字母變大寫
s2 = s1.capitalize()
print(s2)
運行結果:
casefold(self):
說明:字符串變小寫,Unicode
編碼中凡是有對應的小寫形式的,都會轉換。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "ABC"
# casefold() 表示字符串變小寫
s2 = s1.casefold()
print(s2)
運行結果:
center(self, width, fillchar=None):
說明:內容居中, width
定義總長度,fillchar
表示空白處填充內容,默認無。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abc"
# 內容居中,總長度為 20 ,填充內容為 "*"
s2 = s1.center(20,"*")
print(s2)
運行結果:
count(self, sub, start=None, end=None):
說明:查看指定子序列在字符串中出現的次數, sub
表示要指定的子序列, start
指定開始搜索的位置,默認從第一個字符開始,第一個字符索引位置為0, end
指定結束搜索的位置,默認為最后一位。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcabcabc"
# 查看 "b" 在這個字符串里出現的次數
s2 = s1.count("b")
print(s2)
# 指定范圍,查看 "b" 在這個字符串里出現的次數
s3 = s1.count("b",2,5)
print(s3)
運行結果:
encode(self, encoding='utf-8', errors='strict'):
說明:以指定的編碼格式編碼字符串,編碼后的字符串是一個 bytes
對象, encoding
表示要使用的編碼,默認為 utf-8
, errors
指定不同的錯誤處理方案。
注:由于Python3中字符串沒有 decode()
方法,所以可以使用 bytes
對象的 decode()
方法來進行解碼。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "中文"
s2_utf = s1.encode("utf-8")
print("utf-8編碼:",s2_utf)
s3_gbk = s1.encode("gbk")
print("gbk編碼:",s3_gbk)
s4_utf = s2_utf.decode("utf-8")
print("utf-8解碼:",s4_utf)
s5_gbk = s3_gbk.decode("gbk")
print("gbk解碼:",s5_gbk)
運行結果:
endswith(self, suffix, start=None, end=None):
說明:判斷字符串是否以xxx結尾,如果是以xxx結尾返回 True
,否則返回 False
, suffix
表示指定后綴 start
表示開始的位置, end
表示結束的位置。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcabcabc"
# 查看這個字符串是否以 "abc" 結尾
s2 = s1.endswith("abc")
print(s2)
# 指定范圍,查看這個字符串是否以 "c" 結尾
s3 = s1.endswith("c",0,6)
print(s3)
# 指定范圍,查看這個字符串是否以 "c" 結尾
s4 = s1.endswith("b",0,6)
print(s4)
運行結果:
expandtabs(self, tabsize=8):
說明:將字符串中的 tab
符號(即制表符 \t
),轉換成空格, tabsize
表示將字符串中的一個 tab
符號轉換為多少個空格,默認為8個。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcabc\tabc"
# 將一個 tab 符號 (即制表符 \t ) 轉換為 20 個空格
s2 = s1.expandtabs(20)
print(s2)
運行結果:
find(self, sub, start=None, end=None):
說明:在字符串中查找指定子序列的位置,如果存在返回指定子序列的索引值,否則返回-1, sub
表示指定的子序列, start
表示開始的位置, end
表示結束的位置。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcabcabc"
# 查找 "c" 所在的位置(從左往右查找,找到第一個后就不會往下繼續查找了)
s2 = s1.find("c")
print(s2)
#指定范圍查找 "c" 所在的位置
s3 = s1.find("c",3,6)
print(s3)
# 如果 "d" 不存在字符串中,就會返回 -1
s4 = s1.find("d")
print(s4)
運行結果:
format(*args, **kwargs):
說明:字符串格式化,動態參數。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 如果不設置指定位置,按默認順序("{}" 相當于占位符)
s1 = "Hello {} , Hello {}"
s2 = s1.format("World","China")
print(s2)
# 如果設置指定位置,可以不按順序
s3 = "Hello {1} , Hello {0} , Hello {1}"
s4 = s3.format("World","China")
print(s4)
運行結果:
format_map(self, mapping):
說明:字符串格式化,和 format(*args, **kwargs)
類似,只不過 mapping
是一個字典對象。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"name" : "L",
"age" : 18
}
s1 = "hello {name} , age {age}".format_map(dic)
print(s1)
運行結果:
index(self, sub, start=None, end=None):
說明:與 find()
類似,在字符串中查找指定子序列的位置,如果存在返回指定子序列的索引值,否則報錯,sub
表示指定的子序列, start
表示開始的位置, end
表示結束的位置。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcabcabc"
# 查找 "d" 的位置,如果沒有找到報錯
s2 = s1.index("d")
print(s2)
運行結果:
isalnum(self):
說明:判斷字符串是否是字母和數字的任意組合,如果是返回 True
,否則返回 False
。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 是 字母 和 數字 的任意組合,返回 True
s1 = "abcabc123"
s2 = s1.isalnum()
print(s2)
# 只包含字母或數字 返回 True
s3 = "abc".isalnum()
print(s3)
s4 = "123".isalnum()
print(s4)
# 如包含空格、小數點等符號則返回 False
s5 = "abc 123".isalnum()
print(s5)
s6 = "abc123.".isalnum()
print(s6)
運行結果:
isalpha(self):
說明:判斷字符串是否只由字母組成,如果是返回 True
,否則返回 False
。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 只包含 字母 返回 True
s1 = "abcabc"
s2 = s1.isalpha()
print(s2)
# 包含 字母 和 數字 返回 False
s3 = "abc123".isalpha()
print(s3)
運行結果:
isdecimal(self):
說明:判斷字符串是否只包含十進制數字,如果是返回 True
,否則返回 False
,定義一個十進制字符串,只需要在字符串前添加 'u' 前綴即可
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 只包含 十進制數字 返回 True
s1 = "123".isdecimal()
print(s1)
# 包含 其它 返回 False
s2 = "root123".isdecimal()
print(s2)
運行結果:
isdigit(self):
說明:判斷字符串是否只由數字組成,如果是返回 True
,否則返回 False
。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 只包含 數字 返回 True
s1 = "123".isdecimal()
print(s1)
# 包含 其它 返回 False
s2 = "root123".isdecimal()
print(s2)
運行結果:
isidentifier(self):
說明:判斷字符串是否為合法的標識符,如果是返回 True
,否則返回 False
。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "statr".isidentifier()
print(s1)
s2 = "start_123".isidentifier()
print(s2)
s3 = "123start".isidentifier()
print(s3)
s4 = "start#".isidentifier()
print(s4)
運行結果:
islower(self):
說明:判斷字符串中所有字母是否為小寫,如果是返回 True
,否則返回 False
。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 都是小寫,返回 True
s1 = "abcabc".islower()
print(s1)
# 包含數字、中文,但是字母為小寫,返回 True
s2 = "abc123中文".islower()
print(s2)
# 只要有一個字母為大寫,則返回 False
s3 = "aBc".islower()
print(s3)
運行結果:
isnumeric(self):
說明:字符串是否只由數字組成。這種方法是只針對unicode對象,定義一個字符串為Unicode,只需要在字符串前添加 'u' 前綴即可。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 只由 數字 組成 返回 True
s1 = u"123456".isnumeric()
print(s1)
# 包含 數字 和 字母 返回 False
s2 = u"abc123".isnumeric()
print(s2)
運行結果:
isprintable(self):
說明:判斷字符串中所有的字符是否為可打印字符或字符串為空,如果是返回 True
,否則返回 False
。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 可打印,返回 True
s1 = "abc123".isprintable()
print(s1)
# 字符串為空,返回 True
s2 = "".isprintable()
print(s2)
運行結果:
isspace(self):
說明:判斷字符串是否全部為空格,如果是返回 True
,否則返回 False
。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 全部為 空格 返回 True
s1 = " ".isspace()
print(s1)
#不全部為 空格 返回 False
s2 = "abc 123".isspace()
print(s2)
運行結果:
istitle(self):
說明:判斷字符串是否為標題,如果是返回 True
,否則返回 False
,所有首字母大寫的為標題。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 為 標題 返回 True
s1 = "Abc".istitle()
print(s1)
# 為 標題 返回 True
s2 = "Abc Abc".istitle()
print(s2)
# 不為 標題 返回 False
s3 = "ABc".istitle()
print(s3)
運行結果:
isupper(self):
說明:判斷字符串中的所有字符是否為大寫,如果是返回 True
,否則返回 False
。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 字母 全部為 大寫 返回 True
s1 = "ABCABC".isupper()
print(s1)
# 字母 和 數字 組合 ,字母為大寫 返回 True
s2 = "ABC123".isupper()
print(s2)
# 字母 其中有小寫 返回 False
s3 = "ABCabc".isupper()
print(s3)
運行結果:
join(self, iterable):
說明:用指定字符串,將可迭代對象拼接起來并生成一個新的字符串, iterable
表示接受可迭代的對象。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
l1 = ["abc","def","ghi"]
# 這個方法會去循環 "l1" 中的每一個元素,讓元素與元素之間通過 "_" 拼接起來,并變成字符串
s1 = "_".join(l1)
print(s1)
運行結果:
ljust(self, width, fillchar=None):
說明:內容左對齊, width
定義總長度,fillchar
表示右側空白處填充內容,默認無。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcabc"
# 內容左對齊,總長度為 20 ,填充內容為 "_"
s2 = s1.ljust(20,"_")
print(s2)
運行結果:
lower(self):
說明:字符串變小寫,對 ASCII
編碼的字母有效。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "ABC"
# lower() 表示字符串變小寫
s2 = s1.lower()
print(s2)
運行結果:
lstrip(self, chars=None):
說明:截掉字符串左側的空格或指定字符, chars
表示指定截掉的字符,默認為空格。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#截掉左側空格
s1 = " abcabc"
s2 = s1.lstrip()
print(s2)
# 截掉左側指定字符 "*"
s3 = "***abcabc"
s4 = s3.lstrip("*")
print(s4)
運行結果:
maketrans(self, *args, **kwargs):
說明:創建字符映射的轉換表,以供 translate
方法使用,如果接收兩個參數,字符串的長度必須相等,而且兩個參數需要形成映射,第一個參數是字符串表示需要轉換的字符,第二個參數也是字符串表示轉換后的字符。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcabc"
# 根據 maketrans() 創建一個轉換表
dic = str.maketrans("ac","xl")
# 根據 translate() 進行轉換
s2 = s1.translate(dic)
print(s2)
運行結果:
partition(self, sep):
說明:根據指定分隔符將字符串分割為前、中、后三部分,并返回一個元組, sep
表示指定分隔符。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abc def ghi"
# 根據 "def" 進行分割為三部分,并生成一個元組
s2 = s1.partition("def")
print(s2)
print(type(s2))
運行結果:
replace(self, old, new, count=None):
說明:將字符串中的字符進行替換, old
表示將被替換的字符, new
表示替換后的字符, count
表示替換的次數,默認全部替換。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcabcabcabc"
#將 "ab" 全部替換為 "cc"
s2 = s1.replace("ab","cc")
print(s2)
#從左側開始替換,只替換兩個
s3 = s1.replace("ab","cc",2)
print(s3)
運行結果:
rfind(self, sub, start=None, end=None):
說明:和 find()
類似,在字符串中查找指定子序列的位置,如果存在返回指定子序列的索引值,否則返回-1,只不過是從右側開始查找。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcabcabc"
# 查找 "c" 所在的位置(從右往左查找)
s2 = s1.rfind("c")
print(s2)
#指定范圍查找 "c" 所在的位置
s3 = s1.rfind("c",3,6)
print(s3)
# 如果 "d" 不存在字符串中,就會返回 -1
s4 = s1.rfind("d")
print(s4)
運行結果:
rindex(self, sub, start=None, end=None):
說明:和index()
類似,在字符串中查找指定子序列的位置,如果存在返回指定子序列的索引值,否則報錯,只不過是從右側開始查找。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcabcabc"
# 查找 "d" 的位置,如果沒有找到報錯(從右側開始查找)
s2 = s1.rindex("d")
print(s2)
運行結果:
rjust(self, width, fillchar=None):
說明:內容右對齊, width
定義總長度,fillchar
表示左側空白處填充內容,默認無。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcabc"
# 內容右對齊,總長度為 20 ,填充內容為 "_"
s2 = s1.rjust(20,"_")
print(s2)
運行結果:
rpartition(self, sep):
說明:和 partition()
類似,根據指定分隔符將字符串分割為前、中、后三部分,并返回一個元組,只不過是從右側開始查找分隔符。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abc abc ghi"
# 根據 "abc" 進行分割為三部分,并生成一個元組(從右側開始查找分隔符)
s2 = s1.rpartition("abc")
print(s2)
print(type(s2))
運行結果:
rsplit(self, sep=None, maxsplit=-1):
說明:從右到左通過指定分隔符對字符串進行切片,并返回一個列表, sep 表示指定分割符,默認為空格, maxsplit 表示分割次數,默認全部分割。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abc_def_ghi"
# 根據 "_" 進行分割,并返回一個列表
s2 = s1.rsplit("_")
print(s2)
print(type(s2))
# 指定了分割次數(從右側開始查找分隔符)
s3 = s1.rsplit("_",1)
print(s3)
print(type(s3))
運行結果:
rstrip(self, chars=None):
說明:和 lstrip()
類似,截掉字符串右側的空格或指定字符, chars
表示指定截掉的字符,默認為空格。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#截掉右側空格
s1 = "abcabc "
s2 = s1.rstrip()
print(s2)
# 截掉右側指定字符 "*"
s3 = "abcabc***"
s4 = s3.rstrip("*")
print(s4)
運行結果:
split(self, sep=None, maxsplit=-1):
說明:和 rsplit()
類似,從左到右通過指定分隔符對字符串進行切片,并返回一個列表, sep 表示指定分割符,默認為空格, maxsplit 表示分割次數,默認全部分割。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abc_def_ghi"
# 根據 "_" 進行分割,并返回一個列表
s2 = s1.split("_")
print(s2)
print(type(s2))
# 指定了分割次數(從左側開始查找分隔符)
s3 = s1.split("_",1)
print(s3)
print(type(s3))
運行結果:
splitlines(self, keepends=None):
說明:根據換行進行分割,并返回一個列表, keepends
表示列表中是否包含換行符,默認不包含。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = """abc
def
ghi"""
# 根據換行分割 返回一個包含各行作為元素的列表,換行符不包括在結果列表里
l1 = s1.splitlines()
print(l1)
# 參數 keepends 為 True 則包含換行符 否則 不包含換行符
l2 = s1.splitlines(1)
print(l2)
運行結果:
startswith(self, prefix, start=None, end=None):
說明:判斷字符串是否是以指定字符開頭,如果是返回 True
,start
表示開始的位置, end
表示結束的位置。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "hello world"
# 查看這個字符串是否以 "he" 開頭
s2 = s1.startswith("he")
print(s2)
# 指定范圍,查看這個字符串是否以 "l" 開頭
s3 = s1.startswith("l",4,7)
print(s3)
運行結果:
strip(self, chars=None):
說明:和 lstrip()
、 rstrip()
類似,截掉字符串左右兩側的空格或指定字符, chars
表示指定截掉的字符,默認為空格。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#截掉左右兩側側空格
s1 = " abcabc "
s2 = s1.strip()
print(s2)
# 截掉左右兩側指定字符 "*"
s3 = "***abcabc***"
s4 = s3.strip("*")
print(s4)
運行結果:
swapcase(self):
說明:字符串的大小寫字母進行轉換,大寫變小寫,小寫變大寫。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcABC"
#大寫變小寫,小寫變大寫
s2 = s1.swapcase()
print(s2)
運行結果:
title(self):
說明:返回 標題化
的字符串,就是說所有單詞都是以大寫開始,其余字母均為小寫。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "hEelo woRld"
s2 = s1.title()
print(s2)
運行結果:
translate(self, table):
說明:根據參數 table
給出的表將字符串中的字符進行轉換, table
表示轉換表,就是通過maketrans方法創建的表。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcabc"
# 根據 maketrans() 創建一個轉換表
dic = str.maketrans("ac","xl")
# 根據 translate() 進行轉換
s2 = s1.translate(dic)
print(s2)
運行結果:
upper(self):
說明:將字符串中的小寫字母轉換為大寫字母。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcabc"
# 將小寫字母 轉換為 大寫字母
s2 = s1.upper()
print(s2)
運行結果:
zfill(self, width):
說明:返回指定長度的字符串,原字符串右對齊,左側填充 "0"
,width
定義總長度。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcabc"
# 原字符串右對齊,左側填充 "0"
s2 = s1.zfill(20)
print(s2)
運行結果:
12.3-索引:
可以根據每個元素的位置索引來找到對應的元素,位置索引又稱為下標,下標都是從 0
開始的。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcdefg"
# 獲取字符串中的第一個元素
print("第一個元素:",s1[0])
# 獲取字符串中的第四個元素
print("第四個元素:",s1[3])
# 獲取字符串中最后一個元素
print("最后一個元素:",s1[-1])
# 獲取字符串中倒數第三個元素
print("倒數第三個元素:",s1[-3])
運行結果:
12.4-查看字符串長度:
可以通過 len()
函數來查看字符串的長度。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcdefg"
# 獲取字符串的長度
print(len(s1))
運行結果:
12.5-切片:
即指定范圍來獲取多個元素, s1[2:8:2]
第一個數字表示起始下標稱為 下限
,第二個數字表示結束下標稱為 上限
,第三個數字表示間隔數稱為 步長
,默認步長為 1
,表示下限和上限之間的每一個元素都會出現在結果中。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcdefg"
# 獲取字符串中前三個元素
print("前三個元素:",s1[0:3])
# 從頭開始獲取時,可以忽略 下限
print("忽略下限:",s1[:3])
#取全部,不能填寫 -1
print("取全部填寫-1的:",s1[:-1])
print("取全部未填寫-1的:",s1[0:])
#每隔兩個兩個元素就獲取一個
print("隔兩個元素:",s1[::3])
運行結果:
12.6-str類型和bytes類型相互轉換
以 UTF-8
編碼,一個漢字三個字節,以 GBK
編碼,一個漢字兩個字節,一個字節是八位。
Python 3.5.1:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "zhongwen"
for i in s1:
print(i)
s2 = "中文"
for i in s2:
print(i)
運行結果:
通過上面的實例可以看出,在 Python 3.5.1
,通過 for
循環字符串時,不管是字母還是中文,都是一個字符一個字符輸出的。
Python 2.7.2:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "zhongwen"
for i in s1:
print(i)
s2 = "中文"
for i in s2:
print(i)
運行結果:
通過上面的實例可以看出,而在 Python 2.7.2
中,通過 for
循環字符串時,是按照字節進行輸出的,所以在輸出中文的時候是亂碼,因為 UTF-8
編碼,一個漢字是三個字節,所以會輸出六個亂碼的字符。
str類型和bytes類型相互轉換:
在 Python 3.5.1
中,既可以把字符轉換成字節,也可以把字節轉換成字符,通過 bytes()
函數即可,可以將字符串轉換成字節。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "中"
for i in s1:
print(i)
b1 = bytes(i,encoding="utf-8")
#輸出十六進制,"\xe4"是十六進制的字符
print(b1)
# 字節默認是以 十六進制 表示,而用 for 循環輸出每一個元素的時候,默認會輸出 十進制
# "228" 表示 十進制,"0b11100100" 表示 二進制
for s in b1:
print("十進制:",s,"二進制:",bin(s))
運行結果:
def __init__(self, value='', encoding=None, errors='strict'): # known special case of str.__init__
"""
str(object='') -> str
str(bytes_or_buffer[, encoding[, errors]]) -> str
說明:通過源碼可以看出,str
接受兩個參數時,第一個參數需要是 bytes
對象, encoding
表示以什么編碼將字節轉換成字符串。
>>> b1 = bytes("中文",encoding="gbk")
>>> b1
b'\xd6\xd0\xce\xc4'
>>> s1 = str(b1,encoding="gbk")
>>> s1
'中文'
12.7-練習題:
通過while循環輸出a、b、c....案例:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcdefg"
start = 0
while start < len(s1):
print(s1[start])
start += 1
運行結果:
通過for循環輸出a、b、c....案例:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcdefg"
for i in s1:
print(i)
運行結果:
通過for循環遇到c不輸出案例:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcdefg"
for i in s1:
if i == "c":
continue
print(i)
運行結果:
通過for循環只輸出a案例:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "abcdefg"
for i in s1:
if i == "b":
break
print(i)
運行結果: