Python的字符串
学习目标
- 掌握Python常用的字符串方法
基本内容
- 字符串
二.字符串
- 字符串是一种有序字符的集合,用于表示文本数据。
- 字符串可以包含零个、一个或者多个字符。字符串使用单引号''、双引号""或三引号(''' '''、""" """)作为字符串的界定符。
- 字符串可以使用ASCII字符、 Unicode字符以及各种符号。
var1 = "Hello World!"
print(var1)
Hello World!
- Python3的字符串编码:可以通过代码查看Python3的字符串默认编码。
import sys
sys.getdefaultencoding()
'utf-8'
- 字符串编码和解码举例:编码和解码格式不一致,会导致程序错误。
a = "Python语言".encode('utf8')
b = 'Python语言'.encode('gb2312')
c = b'Python\xe8\xaf\xad\xe8\xa8\x80'.decode('utf8')
print(a)
print(b)
print(c)
b'Python\xe8\xaf\xad\xe8\xa8\x80'
b'Python\xd3\xef\xd1\xd4'
Python语言
'Python语言'.encode('gb2312').decode('utf8')
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
/var/folders/k6/x52rc50d6z51grg0dcf3hv_r0000gn/T/ipykernel_2984/1987065540.py in <module>
----> 1 'Python语言'.encode('gb2312').decode('utf8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd3 in position 6: invalid continuation byte
- Python3.x完全支持中文字符,默认使用UTF8编码格式,无论是一个数字、英文字母,还是一个汉字,在统计字符串长度时都按一个字符对待和处理。
- 字符串属于不可变序列,意味着不可以直接修改字符串的值。
(1)创建字符串
- 只要为变量分配一个用字符串界定符括起来的字符序列即可创建一个字符串。
var1 = "Hello World!"
print(var1)
Hello World!
- 字符串长度:中文字符和英文字符都算1个。
len("Python语言")
8
- 修改字符串变量的值会导致重新创建一个对象,并指向这个对象。
s = 'mi'
print(id(s))
s = 'Python'
print(id(s))
140153474324656
140153479030896
-
字符串类型在Python中是十分重要的类型,一般用引号中间添加字符的形式表达。
-
不同于其它语言,Python中双引号("")与单引号('')是不加区分的,都可以用来表示字符串,一般有如下三种表现方式:
- 使用单引号''包含字符
- 'Python' 'abc' '中国'
- 注意:单引号表示的字符串里面不能包含单引号,比如Let's go不能使用单引号包含。
- 使用双引号""包含字符
- "PyCharm" "ABC" "北京"
- 注意:双引号表示的字符串里面不能包含双引号,并且只能有一行。
- 使用三引号(三对单引号''' '''或三对双引号""" """)包含字符
- 三引号'''或"""表示的字符串可以换行,支持排版较为复杂的字符串,包含在一对三引号之间而且不属于任何语句的内容被解释器认为是注释。
'''
我是多行注释,
不要搞混了哦!
'''
print('''Python是一门编程语言
Python能做数学运算
要做好练习
''')
print('Python是一门编程语言\nPython能做数学运算\n要做好练习\n')
Python是一门编程语言
Python能做数学运算
要做好练习
Python是一门编程语言
Python能做数学运算
要做好练习
- 单引号、双引号、三单引号、三双引号可以互相嵌套,用来表示复杂字符串。例如:'''Jack said, "I'm very good"'''
- 空字符串表示为''或""。
- 前缀带r或者R的字符串表示Raw字符串(原始字符串)。
- Raw字符串中的所有字符都被看做普通字符,不会处理其中的转义字符。但是,字符串的最后一个字符不能是“\”。原始字符串主要用于正则表达式、文件路径或者URL的场合。
path = 'C:\Windows\twunk.exe'
print(path)
path1 = r'C:\Windows\twunk.exe'
print(path1)
C:\Windows wunk.exe
C:\Windows\twunk.exe
(2)字符串访问方式
-
字符串包括正向递增序号和反向递减序号两种序号体系。
-
正向递增序号:0~L-1,以最左侧字符序号为0,向右依次递增,最右侧字符序号为L-1。其中L为字符串的长度。
-
反向递减序号:-L~-1,以最右侧字符序号为-1,向左依次递减,最左侧字符序号为-L。
-
Python字符串提供区间访问方式,采用[N:M]格式,表示字符串中从N到M(不包含M)的子字符串,其中,N和M为字符串的索引序号,可以混合使用正向递增序号和反向递减序号。如果表示中M或者N索引缺失,则表示字符串把开始或结束索引值设为默认值。
str = "Python大数据基础与实战"
print(str[0], str[5], str[-1])
print(str[2:6])
print(str[:6])
print(str[6:])
print(str[:])
P n 战
thon
Python
大数据基础与实战
Python大数据基础与实战
(3)字符串的转义
- 如果需要在字符串中使用特殊字符时,Python用反斜杠</font>。反斜杠字符是一个特殊字符,在字符串中表示“转义”。
- 当Python字符串中有一个反斜杠时表示一个转义序列的开始,称反斜杠为转义符。
| 转义字符 | 含义 | 转义字符 | 含义 |
|---|---|---|---|
| \\ | 反斜线 | \a | 响铃符 |
| \' | 单引号 | \b | 退格符 |
| \" | 双引号 | \f | 换页符 |
| \n | 换行符 | \r | 回车符 |
| \t | 水平制表符 | \v | 垂直制表符 |
| \ddd | 八进制表示的ASCII码对应的字符 | \xdd | 十六进制表示的ASCII码对应的字符 |
- C语言把空字符“\0”作为字符串的结束标志,但是在Python中,空字符是作为一个普通字符进行处理。
# 一个空字符、一个十六进制和一个八进制表示的ASCII字符
s = '\0\x61\101'
print(s)
print(len(s))
aA
3
(4)字符串运算符
| 操作符 | 描述 |
|---|---|
| + | 字符串连接 |
| * | 重复输出字符串 |
| [] | 通过索引获取字符串中字符 |
| [:] | 截取字符串中的一部分 |
| in | 成员运算符--如果字符串中包含给定的字符串返回True |
| not in | 成员运算符--如果字符串中不包含给定的字符串返回True |
| r/R | 原始字符串--在字符串的第一个引号前加上字母r或R,字符串中的所有的字符直接按照字面的意思来使用,不再转义特殊或不能打印的字符。 |
| % | 格式化字符串 |
- Python提供了5个字符串的基本操作符,如表所示。
| 操作符 | 描述 |
|---|---|
| x + y | 连接两个字符串x与y |
| x * n 或 n * x | 复制n次字符串x |
| x in s | 如果x是s的子串,返回True,否则返回False |
| str[i] | 索引,返回第i个字符 |
| str[N : M] | 切片,返回索引第N到M的子串,其中不包含M |
- 字符串连接操作
- 基本连接操作+:s1 + s2 + ... + sn
- 其中,s1,s2,...,sn,均是一个字符串,表达式的值也是一个字符串。
- 重复连接操作:s * n 或 n * s
s1 = "Hello" + " " + "Python"
print(s1)
s2 = "重要的事情说三遍!" * 3
print(s2)
s3 = "Python" in s1
print(s3)
Hello Python
重要的事情说三遍!重要的事情说三遍!重要的事情说三遍!
True
- 字符串的索引
- Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。字符串变量名后接用中括号括起来的编号即可实现字符串的索引。
s = "Hello"
print(s[0], s[-4])
H e
- 字符串的分片
- 字符串的分片(或切片)就是从给定的字符串中分离出部分字符,这时可以使用以下形式的字符串索引编号:
- str[i: j: k]
- 其中,i是索引起始位置,j时索引结束位置但不包括位置上的字符,索引编号每次增加的步长为k。
str1 = "Python"
# 通过索引输出字符串第一个字符
print(str1[0])
# 输出从第三个开始到第五个的字符
print(str1[2: 5])
# 输出第一个到倒数第二个的所有字符
print(str1[0:-1])
# 输出第一个到倒数第二个的所有字符
print(str1[:-1])
print(str1[1: 5: 2])
P
tho
Pytho
Pytho
yh
- 字符串的逻辑操作
- 字符串的逻辑操作是指字符串参与逻辑比较,其操作的结果是一个逻辑量,通常用于表达字符处理的条件。
- 关系操作(比较)
- 成员的关系操作
- 字符串的成员关系操作包括in和not in操作,一般格式为:字符串1 [not] in 字符串2
- 该操作用于判断字符串1是否属于字符串2,其返回值为True或False。
print("SHANGHAI" < "SHANKONG")
print('a' in 'abc')
True
True
- r/R原始字符串
- 前缀带r或者R的字符串表示Raw字符串(原始字符串)。
- Raw字符串中的所有字符都被看做普通字符,不会处理其中的转义字符。但是,字符串的最后一个字符不能是“\”。原始字符串主要用于正则表达式、文件路径或者URL的场合。
path = 'C:\Windows\twunk.exe'
print(path)
path1 = r'C:\Windows\twunk.exe'
print(path1)
C:\Windows wunk.exe
C:\Windows\twunk.exe
- 字符串对象常用的方法
- 字符串作为常用的一种数据类型,Python提供了很多内建方法,如字符串的查找、索引、取长度、统计、替换和分割等。
- 方法的引用形式:对象名.方法名(参数)
| 方法/函数 | 作用 |
|---|---|
| str.capitalize() | 返回字符串的副本,其首字符大写,其余字符小写 |
| str.count(sub[,start[,end]]) | 返回[start, end]范围内sub的非重叠出现次数,start和end可选 |
| str.endswith(sub[,start[,end]]) | 返回布尔值,表示字符串是否以指定的sub结束,同类方法str.startswith() |
| str.find(sub[,start[,end]]) | 返回字符串中首次出现子串sub的索引位置,start和end可选,若未找到sub,返回-1 |
| str.split(sep = None) | 使用sep作为分隔符拆分字符串,返回字符串中单词的列表,分隔空字符串 |
| str.strip([chars]) | 删除字符串前端和尾部chars指定的字符集,如果省略或None,则删除空白字符 |
- ①字符串查找
- s.find(substr,[start,[end]]):返回s中出现substr的第一个字符的编号,如果s中没有substr则返回-1。start和end作用就相当于在s[start: end]中搜索。
- s.index(substr,[start,[end]]):与find()相同,只是在s中没有substr时,会返回一个运行错误(抛出异常)。
- s.rfind(substr,[start,[end]]):返回s中最后一次出现的substr的第一个字符的编号,如果s中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字符编号。
- s.rindex(substr,[start,[end]]):与rfind()相同,只是在s中没有substr时,会返回一个运行错误(抛出异常)。
- s.count(substr,[start,[end]]):返回substr在字符串s中出现的次数。
mystr = "Python is an excellent language"
index = mystr.find("programming")
index1 = mystr.find("excellent", 0, 30)
print(index)
print(index1)
-1
13
str = "i love Python, i am learing Python"
# start和end为默认参数
print(str.count("i"))
# start值为2,end值为默认参数
print(str.count("i", 2))
3
2
- ②字符串的分割(拆分)
- s.split([sep,[maxsplit]]):以sep为分隔符,把字符串s拆分成一个列表。默认的分隔符为空格。maxsplit表示拆分的次数,默认取-1,表示无限制拆分。
- s.rsplit([sep,[maxsplit]]):从右侧把字符串s拆分成一个列表。
- 对于split()和rsplit()方法,如果不指定分隔符,则字符串中的任何空白符号(空格、换行符、制表符等)都将被认为是分隔符,把连续多个空白字符看作一个分隔符。
- s.splitlines([keepends]):把s按行拆分为一个列表。keepends是一个逻辑值,如果为True,则每行拆分后会保留行分隔符。
- s.partition(sub):从sub出现的第一个位置起,把字符串s拆分成一个三元素的元组(sub左边字符, sub, sub右边字符)。如果s中不包含sub,则返回(s,'','')。
- s.rpartition(sub):从右侧开始,把字符串s拆分成一个三元素的元组(sub左边字符, sub, sub右边字符)。如果s中不包含sub,则返回(s,'','')。
str = 'WinXP||Win7||Win8||Win10'
# 从左往右分隔
print(str.split('||'))
# 从右往左分隔
print(str.rsplit('||'))
# 指定最大分隔次数为2
print(str.split('||', 2))
# 从左往右分隔
print(str.partition("||"))
# 从右往左分隔
print(str.rpartition("||"))
# 指定的分隔符不在原字符串中,则返回原字符串和两个空字符串
print(str.partition("a"))
print(str.splitlines(True))
['WinXP', 'Win7', 'Win8', 'Win10']
['WinXP', 'Win7', 'Win8', 'Win10']
['WinXP', 'Win7', 'Win8||Win10']
('WinXP', '||', 'Win7||Win8||Win10')
('WinXP||Win7||Win8', '||', 'Win10')
('WinXP||Win7||Win8||Win10', '', '')
['WinXP||Win7||Win8||Win10']
- ③字符串的连接(组合)
- s.join(seq):把seq代表的序列组合成字符串,用s将序列各元素连接起来。字符串中的字符是不能修改的,如果要修改,通常的方法是,用list()函数把字符串s变为以单个字符为成员的列表(使用语句:s = list(s)),再使用给列表成员赋值的方式改变值(如s[3]='a'),最后再使用语句“s = "".join(s)”还原成字符串。
- join()方法用来将列表中的多个字符串进行连接,并且在相邻两个字符串之间插入指定字符。示例如下。
- 注意:使用“+”运算符也可以连接字符串,但是效率较低,应优先使用join()方法。
test = ["I", "love", "Python"]
# 指定插入字符为空格
s = " ".join(test)
print(s)
I love Python
- ④字符串的大小写转换
- lower()返回小写字符串,upper()返回大写字符串,capitalize()将字符串首字符大写、title()将字符串中的每个单词首字符大写、swapcase()完成大小写互换。
s = "i am a teacher"
print(s.lower())
print(s.upper())
print(s.capitalize())
print(s.title())
print(s.swapcase())
i am a teacher
I AM A TEACHER
I am a teacher
I Am A Teacher
I AM A TEACHER
- ⑤字符串替换
- s.replace(oldstr, newstr, [count]):把s中的oldstr替换为newstr,count为替换次数。这是替换的通用形式,还有一些函数进行特殊字符的替换。
- s.expandtabs([tabsize]):把s中的tab字符替换为空格,每个tab替换为tabsize个空格,默认是8个。
str = "this is string example ... wow!!! this is really string"
print(str.replace("is", "was"))
print(str.replace("is", "was", 3))
str1 = "this is str\ting example!"
print(str1)
print(str1.expandtabs(1))
thwas was string example ... wow!!! thwas was really string
thwas was string example ... wow!!! thwas is really string
this is str ing example!
this is str ing example!
- ⑥字符串删除
- s.strip([chars]):把s中前后chars中有的字符全部去掉,可以理解为把s前后chars替换为None。默认去掉前后空格。
- s.rstrip([chars]):把s右边chars中有的字符全部去掉。默认去掉右边的空格。
- s.lstrip([chars]):把s左边chars中有的字符全部去掉。默认去掉左边的空格。
s = " he is a student\t\t"
# 删除s左右两端的空白字符
print(s.strip())
print(s.rstrip("\t"))
'aabbccddeeeffg'.strip('gaef')
he is a student
he is a student
'bbccdd'
- ⑦字符串测试
- isalnum():测试字符串是否全为数字和字母,并至少有一个字符。
- isalpha():测试字符串是否为字母,并至少有一个字符。
- isdigit():测试字符串是否为十进制数字字符,并至少有一个字符。
- isdecimal():测试字符串是否只包含十进制字符(这种方法只存在于unicode对象)
- isnumeric():测试字符串是否只由数字组成(这种方法只存在于unicode对象)
- isspace():测试字符串是否为空白字符,并至少有一个空格。
- isupper():测试字符串是否为大写字母
- islower():测试字符串是否为小写字母
- istitle():测试字符串是否为首字母大写
print('1234abcd'.isalnum())
# 全部为英文字母时返回True
print('1234abcd'.isalpha())
# 全部为数字时返回True
print('1234abcd'.isdigit())
True
False
False
- ⑧eval()
- 内置函数eval()尝试把任意字符串转化为Python表达式并求值。
eval(" 10 * 2 / 5")
4.0
- ⑨startswith()、endswith()
- 这两个方法用来判断字符串是否以指定字符串开始或者结束
- s.startswith(prefix,[start,[end]]):是否以prefix开头,若是返回True,否则返回False。
- s.endswith(suffix,[start,[end]]):是否以suffix结尾,若是返回True,否则返回False。
print("test.py".endswith((".py", ".cpp", ".java")))
print("test.py".startswith("test", 0))
True
True
- ⑩center()、ljust()、rjust()
- 返回指定宽度的新字符串,原字符串居中、左对齐或右对齐出现在新字符串中,如果指定的宽度大于字符串长度,则使用指定的字符(默认为空格)填充。
print("let's begin".center(20))
print("let's begin".center(20, "+"))
print("let's begin".ljust(20, "-"))
print("let's begin".rjust(20, "-"))
let's begin
++++let's begin+++++
let's begin---------
---------let's begin

浙公网安备 33010602011771号