|
文章目录
- 1. 什么是对象的方法
- 2. 字符串的方法
- 2.1 字符串的常用方法
- 2.2 类型判断
- 2.3 查找和替换
- 2.4 字符串常用方法讲解
- count
- find
- split、splitlines
- join
- strip、lstrip、rstrip
- replace
- startswith、endswith
- isdigit
- 字符串的倒序
- 3. 补充学习
- 3.1 关键字 in
- 3.2 字符串不可变

1. 什么是对象的方法
前面我们已经学习过了好几种类型的对象了,比如:整数类型对象、字符串类型对象、列表类型对象、元组类型的对象等等
对象通常都拥有属于自己的方法(英文叫 method )
对象的方法其实可以看成是对象所拥有的函数
也就是说 这个方法,是 属于 这个对象的函数
调用对象的方法,和调用函数差不多,只要在前面加上 所属对象 和 一个点
比如:
# var1 是一个列表对象
var1 = [1,2,3,4,5,6,7]# 列表对象都有 reverse方法
var1.reverse()
print(var1)
这里, reverse就是列表对象的一个方法,该方法将列表元素倒过来
var1.reverse() 语句就会将列表变量var1 里面的元素倒过来存放
运行结果就是 var1就变成了 [7, 6, 5, 4, 3, 2, 1]
对象的方法是和这个对象 类型 紧密相关的
对象是什么类型,就决定了对象有哪些方法
字符串有字符串的方法,列表有列表的方法,元组有元组的方法
2. 字符串的方法
2.1 字符串的常用方法
-
upper(): 转换字符串中的所有小写字母为大写.
-
lower(): 转换字符串中的所有大写字符为小写.
-
title(): 转换字符串中每个子字符串首字母大写
-
len(字符串)可以获取到字符串的长度.
-
count(子字符串)可以统计某一个子字符串出现的次数.
-
index(子字符串)可以返回子字符串出现的位置.
-
find(子字符串)可以返回子字符串出现的位置.
注意:find()找不到会返回-1,index()找不到会报错
-
strip(): 去除字符串首尾的空字符.
-
split(str, num): 切分字符串, 以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+1 个子字符串.如果是split(),就以空字符来分割
-
join(): 将列表中的字符串元素 以某字符串为连接符, 连接为一个字符串
-
replace(str1, str2): 替换字符串. 将字符串中的str1替换为str2
2.2 类型判断
方法(类型判断) | 说明 |
---|---|
isspace() | 如果string中只包含空格, 则返回True 否则返回 False |
isalnum() | 如果string中至少有一个字符且所有字符都是字母或者数字, 则返回True 否则返回 False |
isalpha() | 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False |
isdecimal() | 如果 string 只包含十进制数字则返回 True 否则返回 False. |
isdigit() | 如果 string 只包含数字则返回 True 否则返回 False. |
isnumeric() | 如果 string 中只包含数字字符,则返回 True,否则返回 False |
istitle() | 如果 string 是标题化的(所有单词都是以大写开始,其余字母均为小写)则返回 True,否则返回 False |
islower() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False |
isupper() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False |
2.3 查找和替换
方法(查找和替换) | 说明 |
---|---|
startswith(x, beg, end) | 检查字符串是否以x开头,如果beg 或者 end 指定则检查指定的范围内是否以 obj 开头,如果是,返回 True,否则返回 False. |
endswith(x, beg, end) | 检查字符串是否以x结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False. |
find(str, beg, end) | 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 |
index() | 跟find()方法一样,只不过如果str不在 string中会报一个异常. |
replace(str1, str2) | 替换字符串. 将字符串中的str1替换为str2. |
下面来详细介绍常被用到的字符串方法:
2.4 字符串常用方法讲解
count
count 方法可以返回字符串对象包含了多少个参数指定的字符串
# 调用字符串的count 方法,这里返回2,
# 表示该字符串包含了两个 '我们'
'我们今天不去上学,我们去踢足球'.count('我们')
find
find 方法 会在字符串中查找 参数 子字符串,并返回该 参数字符串 在其中 第一个 出现的位置索引
str1 = '我们今天不去上学,我们去踢足球'# 返回 0 , str1字符串中有两个 '我们'
# find返回的是第一个 '我们' 的索引 0
pos1 = str1.find('我们')
如果字符串对象里面 没有 要查找的参数字符串,就会返回 -1
find 方法 的第二个参数,用来指定查找字符串范围,比如
str1 = '我们今天不去上学,我们去踢足球'# 第2个参数 5, 表示从 索引 5 的位置开始往后查找
# 返回的是后面 我们 的索引 9
pos1 = str1.find('我们',5)
split、splitlines
split() 是我们常用的方法, 经常用来从字符串中截取
出我们想要的信息.
split() 方法以 参数字符串 为分割符, 将字符串切割为多个字符串, 作为元素存入一个列表, 并返回这个列表.
str1 = '小张:79 | 小李:88 | 小赵:83'
pos1 = str1.split('|')
这里 split() 方法指定 | 作为源字符串str1的分割符, 这样原来的字符串就被分成了3个部分:
小张:79小李:88小赵:83
最后将这三个字符串存入一个列表中返回, 返回的结果就是:
['小张:79 ',' 小李:88 ',' 小赵:83'
]
大家要注意的是:
分割符本身在切割后, 会被丢弃掉, 所以在切割后的字符串中就不会有分割符.
可能有的读者会注意到上面的3个字符串不对齐,
这不是我们的笔误
原来的字符串,被切开后,分隔符前面有的空格字符,会保留下来
小张 前面没有空格,所以切割后,切割出来的结果就没有空格
而 小李 和 小赵 前面是有空格的,切割出来的结果就有空格
而且不一定非要用竖线分割, 我们可以指定任何其他的分割符来分割字符串, 比如:
'小张:79 | 小李:88 | 小赵:83'.split('小赵')
这样就是以 小赵 这个字符串为界分割, 返回结果如下:
['小张:79 | 小李:88 | ',':83'
]
字符串对象中还有 splitlines() 方法也比较常用, 就是把字符串 按换行符 进行切割
, 比如:
salary = '''
小王 10000元
小李 20000元
小徐 15000元
'''print(salary.splitlines())
结果输出为:
['', '小王 10000元', '小李 20000元', '小徐 15000元']
这样每行内容作为列表中的一个元素.
splitlines() 方法经常用在文件处理中, 读出文件内容存入字符串, 然后调用字符串的 splitlines() 方法, 把每行内容依次存入列表.
随后循环遍历列表, 就可以逐行分析文件内容了.
可能有人注意到,上例中,为何最后一个换行符没有导致返回的列表最后是一个空字符串呢?
这个函数的行为就是这样设计的(目前我也清楚为何这样设计)
如果要最后也能切出 空字符,使用 salary.split(‘\n’)
下面补充一个练习题:
有类似于这样的一个用于存放股票代码的文件stock.txt:
GC007 | 204007
GC014 | 204014
GC028 | 204028
GC091 | 204091
GC182 | 204182
基金金泰 | 500001
基金泰和 | 500002
基金安信 | 500003
基金汉盛 | 500005
基金裕阳 | 500006
基金景阳 | 500007
题目要求: 请写一个股票信息查询程序,从文件加载数据, 可以让使用者 循环多次 查询股票信息。
每次查询时,提示 请输入要查询的股票名称或代码:
当用户输入股票代码(6位全是数字)时,打印出对应的 股票名称和代码
当用户输入股票名称(不全是数字)时,打印出对应的 股票名称和代码
with open('stock.txt', 'r', encoding='utf-8') as f:# 将股票代码文件逐行读取,并将每列内容作为一个元素存放到列表中infolist = f.read().splitlines()# 以 股票名:股票代码 的形式存放于字典中
stock_code = {}
for info in infolist:# 清除每行前后空格info = info.strip()# 去除空行if not info:continuestock_list = info.split(' | ')name = stock_list[0]code = stock_list[-1]stock_code[name] = codewhile 1:content = input("请输入要查询的股票名称或代码: ")if content.isdigit():# 股票代码for name, code in stock_code.items():if content == code:print(f'股票名称是: {name}, 股票代码是: {code}')else:# 股票名称print(f'股票名称是: {content}, 股票代码是: {stock_code[content]}')
join
join 方法和 split 方法正好相反.
split() 方法是将字符串, 以某字符串为界, 切割成多个字符串 存入列表中
join() 方法是将列表中的字符串元素 以某字符串为连接符, 连接为一个字符串
比如:
'|'.join(['小张:79 ',' 小李:88 ',' 小赵:83'
])
返回的就是字符串 小张:79 | 小李:88 | 小赵:83
相当于把参数列表里面的字符串连接在一起, 中间加上指定的连接符 |
再比如:
'小赵'.join(['小张:79 | 小李:88 | ',':83'
])返回的就是字符串 '小张:79 | 小李:88 | 小赵:83'
相当于把参数列表里面的字符串连接在一起, 中间加上指定的连接符 小赵
strip、lstrip、rstrip
strip() 方法会将字符串左边和右边的空格删掉, 但是不会删除字符串中的空格
比如:
' 小 李:88 '.strip() 返回的就是 '小 李:88',去掉了前后的空格,但是中间的空格不会去掉
lstrip方法 将 字符串前面 (左边) 的空格删除,但是不会删除字符串中间和右边的空格
比如:
' 小 李:88 '.lstrip() 返回的就是 '小 李:88 '
rstrip方法 将 字符串后面 (右边) 的空格删除,但是不会删除字符串中间和左边的空格
比如:
' 小 李:88 '.rstrip() 返回的就是 ' 小 李:88'
replace
replace() 方法也是常用的方法之一, 用来替换字符串里面所有指定的子字符串为另一个字符串.
比如:
str1 = '我们今天不去上学,我们去踢足球'
str1 = str1.replace('我们', '他们')
上面的replace()方法就是把字符串中的‘我们’替换成了‘他们’
结果就是: ‘他们今天不去上学,他们去踢足球’
startswith、endswith
-
startswith() 方法用来检查字符串是否以参数指定的字符串开头, 如果是, 返回True, 否则返回False
-
endswith() 方法用来检查字符串是否以参数指定的字符串结尾, 如果是, 返回True, 否则返回False
str1 = '我们今天不去上学,我们去踢足球'
str1.startswith('我们') # 返回 True
str1.endswith('我们') # 返回 False
isdigit
isdigit() 方法检查字符串是否全部由数字构成
, 如果是, 返回True, 否则返回False
比如我们可以通过 isdigit() 方法判断用户输入的电话号码是否全部是数字字符
str1 = input('请输入手机号码:')
if not str1.isdigit(): # 不是全部由数字字符构成print('您输入的手机号码不正确,必须全部是数字')
字符串的倒序
要得到字符串的倒序, 只需要使用切片操作 [::-1] 即可
:: 表示切片字符串从头到尾, 也就是全部内容, 而步长-1表示, 颠倒过来取元素, 如下:
str1 = '字符串的倒序'
reverse = str1[::-1]
print(reverse)
3. 补充学习
3.1 关键字 in
如果我们要写一个程序,让用户输入身高和体重,如下
str1 = input('请输入您的身高 和 体重, 用逗号隔开')
如果我们想判断 用户输入的字符串中是否包含了逗号 , 可以使用关键字 in
,如下
str1 = input('请输入您的身高 和 体重, 用逗号隔开')
if ',' in str1:print('您的输入包含了逗号')
还可以使用 not in
表示不包含:
str1 = input('请输入您的身高 和 体重, 用逗号隔开')
if ',' not in str1:print('您的输入格式错误,缺少逗号')
同理, in 不仅可以用在字符串对象上, 也可以用在元组、列表对象上, 比如:
tuple1 = (1,2,3,4,5)
list1 = [1,2,3,4,5]if 1 in tuple1:print('tuple1 中包含了数字 1')
if 1 in list1:print('list1 中包含了数字 1')
3.2 字符串不可变
看这个示例:
a = ' 小李 '
a.strip()
print(a,len(a))b = ' 小李 '
b.replace(' ','')
print(b,len(b))
运行结果,可以发现 变量a、b 分别调用 strip、replace 方法后,
再次打印,发现a、b 对应的还是原来的内容,没有变化
为什么?
因为 a.strip() , b.replace(’ ‘,’') 并不能改 a、b 字符串的内容
字符串内容是不可变化的, a.strip() , b.replace(’ ‘,’') 返回了一个新的字符串对象,去掉空格, 但是原来的 a、b 并没有变化
我们可以像下面这样修改:
a = ' 小李 '
a = a.strip() # 变量名a重新赋值
print(a,len(a))b = ' 小李 '
b = b.replace(' ','') # 变量名b重新赋值
print(b,len(b))
让变量名重新赋值, 对应返回的是新对象
这样,原来的a、b对应的字符串虽然仍然不会变化, 但是 a、b 这两个变量名对应了新的字符串对象,所以打印 a、b 就是新的内容了
|
|