字符串的定义
首先我们知道在python中并不区分单双引号,只要是被引号引起来的都属于字符串,当然我们如果字符串里还要套字符串,就要与外面的字符串给区分开,外面用了单引号,里面就要用双引号,后面我们会学到正则表达式也会有字符串。
还有我们要明白,字符串跟元组一样,都是不可变的,还有它只是字符串,不可以放别的数据哦,
但是里面的元素可以重复,由于字符串不可变,所以字符串并没有增删改这些系统功能,但是有一些别的有意思的功能。
先定义一个空的字符串
str= ' '
字符串里的英文是可以大小转换的
# 一、转换
'''
eval():识别str并转换为有效的表达式
upper():小——》大
lower():大---》小
swapcase():大---》小 小----》大
capitalize():首单词的首字母大写,其他全部小写,英文句子
title():每个单词的首字母大写,其他全部小写
ord(),chr():依据ASCII码表进行转换
实例
str1 = 'qqAAAwsdq'
st1 = str1.upper()#QQAAAWSDQ
print(st1)
st1 = str1.lower()#qqaaawsdq
print(st1)
st1 = str1.swapcase()#QQaaaWSDQ
print(st1)
字符串的基本操作
我们上面提到字符串不能进行增删改,但是我们可以用自己的方式来
# 1.+:拼接
str1 = 'abc'
str2 = '123'
print(str1 + str2)
# 2.*:扩充
print(str1 * 5)
# 3.in和not in 判断a在没在字符串里面,其他的容器可以采用这个判断,输出的是布尔值
print('a' in 'agahjg')
print('c' not in 'xyz')
# 4.字符串是有序的,所以通过索引访问字符串中的字符,注意索引的越界问题
str3 = 'abcdefxyz123'
print(str3[0])
print(str3[-1])
# print(str3[10]) # IndexError: string index out of range 越界报错问题
# 5.切片
print(str3[2:])
print(str3[::-1]) # 逆序
# 6.遍历
for ch in str3:
print(ch)
for i in range(len(str3)):
print(i,str3[i])
for i,ch in enumerate(str3):
print(i,ch)
# 7.和列表相同的系统功能
print(len(str3))
print(max(str3))
print(min(str3))
# 统计一个字符在字符串中出现的次数
str3 = 'abcdefaaaxyz123'
r = str3.count('a')
print(r)
s = 'abc'
print(list(s)) # ['a', 'b', 'c']
print(tuple(s)) # ('a', 'b', 'c')
print(set(s)) # {'c', 'b', 'a'}
字符串的系统功能
字符串的大小转换
'''
upper():小——》大
lower():大---》小
swapcase():大---》小 小----》大
capitalize():首单词的首字母大写,其他全部小写,英文句子
title():每个单词的首字母大写,其他全部小写
'''
str2 = 'This is A Text'
# 注意1:输出还是原字符串
str2.upper()
print(str2)
str21 = str2.upper()
print(str2) # This is A Text
print(str21) # THIS IS A TEXT
# 注意2:重新赋值了,输出了转化之后的字符串
# str2 = 'This is A Text'
# str2 = str2.upper()
# print(str2) # 重新赋值,THIS IS A TEXT
print(str2.lower())
print(str2.swapcase()) # 大小转小写,小写转大写
print(str2.capitalize()) # 首单词的首字母大写,其他全部小写 This is a text
print(str2.title()) # 每个单词的首字母大写,其他全部小写 This Is A Text
# 3.ord(),chr():依据ASCII码表进行转换
print(chr(65))
print(chr(90))
print(ord('a'))
print(ord('1'))
# 练习:
# 扩展:string模块 **********
import string
print(string.ascii_uppercase) # 大写字母
print(string.ascii_lowercase) # 小写字母
print(string.ascii_letters) # 大写+小写字母
print(string.digits) # isdigit() 数字
print(string.ascii_letters + string.digits) # 大小写字母+数字
# 需要判断一个字符是否是大写字母 *********
ch = 'r'
# if 'A' <= ch <= 'Z': # 方式一
# if ch >= 'A' and ch <= 'Z': # 方式二
# if ch in [chr(n) for n in range(65,91)]: # 方式三
# if ch in string.ascii_uppercase: # 方式四
# pass
# 从控制台输入一段文本,将大写字母转换为小写,小写字母转换为大写
# data = input('请输入文本:')
# new_data = ''
# for ch in data:
# if ch in string.ascii_uppercase:
# new_data += chr(ord(ch) + 32)
# elif ch in string.ascii_lowercase:
# new_data += chr(ord(ch) - 32)
# else:
# new_data += ch
# print(new_data)
查找
find():从左往右进行检索,返回被查找的子字符串在原字符串中第一次出现的位置,如果查找不到返回-1 **
rfind():从右往左进行检索
index():从左往右进行检索,返回被查找的子字符串在原字符串中第一次出现的位置,如果查找不到则直接报错
rindex():从右往左进行检索
# 二、查找
'''
find():从左往右进行检索,返回被查找的子字符串在原字符串中第一次出现的位置,如果查找不到返回-1 ******
rfind():从右往左进行检索
index():从左往右进行检索,返回被查找的子字符串在原字符串中第一次出现的位置,如果查找不到则直接报错
rindex():从右往左进行检索
'''
# 1.默认全局查找
# a.如果子字符串存在,则二者使用相同,返回第一次出现的索引
str2 = 'abcda45066aaaa'
print(str2.index('a'))
print(str2.find('a'))
# b.如果子字符串不存在,则index报错,find返回-1
# print(str2.index('x')) # ValueError: substring not found
print(str2.find('x')) # -1
# 2.局部查找,注意:遵循前闭后开区间
print(str2.index('a',0,4)) # 0
print(str2.find('a',0,4)) # 0
# print(str2.index('a',1,4)) # ValueError: substring not found
print(str2.find('a',1,4)) # -1
# 3.rindex和rfind,从右往左进行查找,返回的索引仍然是原列表中的索引
print(str2.rindex('a')) # 13
print(str2.rfind('a')) # 13
填充
center(width[,fillchar]):用fillchar填充指定的字符串,填充之后的长度为width,原字符串居中显示
ljust(width[,fillchar]):用fillchar填充指定的字符串,填充之后的长度为width,原字符串居左显示,
rjust(width[,fillchar]):用fillchar填充指定的字符串,填充之后的长度为width,原字符串居右显示,
zfill(width):原字符串居右显示,剩余的字符默认用0填充
'''
center(width[,fillchar]):用fillchar填充指定的字符串,填充之后的长度为width,原字符串居中显示 ********
ljust(width[,fillchar]):用fillchar填充指定的字符串,填充之后的长度为width,原字符串居左显示,
rjust(width[,fillchar]):用fillchar填充指定的字符串,填充之后的长度为width,原字符串居右显示,
zfill(width):原字符串居右显示,剩余的字符默认用0填充
'''
str3 = 'hello'
# 1.默认用空格填充
print(str3.center(30))
print(str3.ljust(30))
print(str3.rjust(30))
# 2.自定义fillchar
print(str3.center(30,'*'))
print(str3.ljust(30,'*'))
print(str3.rjust(30,'*'))
# 3.zfill
print(str3.zfill(30))
合并与分割
# 五、合并和分割 **********
'''
join():使用指定的子字符串将列表中的元素连接【列表-----》字符串】
split():使用指定的子字符串将原字符串进行分割,得到一个列表 【字符串-----》列表】
'''
# 1.分割:只能分割有规律的字符串
# a.默认全部分割
str5 = 'zhangsan=lisi=wangwu=xiaoming'
lst = str5.split('=')print(lst) # ['zhangsan', 'lisi', 'wangwu', 'xiaoming']
# b.控制分割的次数lst = str5.split('=',2)print(lst)
# ['zhangsan', 'lisi', 'wangwu=xiaoming']
# 2.合并,注意:列表中的元素必须全部是字符串,才能拼接lst = ['ge','345','434','gahiah']list51 = '*'.join(lst)print(list51) # ge*345*434*gahiah# 拼接的子字符串也可以为空list51 = ''.join(lst)print(list51) # ge345434gahiah
#替换
replace(old,new):将原字符串中的old替换为new
映射替换:
maketrans():生成映射表
translate():根据映射表将指定字符串中的指定字符替换为映射表中对应的字符
'''
replace(old,new,num):将原字符串中的old替换为new *******
映射替换:
maketrans():生成映射表
translate():根据映射表将指定字符串中的指定字符替换为映射表中对应的字符
'''
# 1.replace():只能替换有规律得字符串,如果没有规律,则需要借助于正则表达式,re.sub()
# a.默认全部替换
str6 = 'aaa==3465==gsjhg==eut==23'
str61 = str6.replace('==','*')
print(str61)
# b.控制替换得次数
str61 = str6.replace('==','*',3)
print(str61)
# 2.映射替换,场景:给字符串进行加密,加密规则自定义
str62 = '4189105110937'
# 制作映射表【规定替换的规则】,注意:str是模块名,因为是常用模块,无需导入
table = str.maketrans('0123456789','%$#@()*&^>')
print(table) # {48: 97, 49: 36, 50: 35, 51: 64, 52: 40, 53: 41, 54: 42, 55: 38, 56: 94, 57: 62}
# 根据映射表将指定字符串做出替换
str62 = str62.translate(table)
print(str62)
# 注意:制作映射表得时候,两个字符串需要长度完全一致
# table = str.maketrans('0123456789','%$#@()*&^>?}') # ValueError: the first two maketrans arguments must have equal length
str6 = 'aaa==3465==gsjhg==eut==23'
table = str.maketrans('=','*')
print(str6.translate(table))
判断
isalpha():一个字符串非空并字符全部是字母才返回True ,不推荐使用
isalnum():一个字符串非空并字符是字母或者数字才返回True ,不推荐使用
isupper()/islower()/istitle():和upper,lower,title有关
isdigit()/isdecimal():一个字符串非空并字符全部是数字才返回True ***
startswith();判断一个字符串是否是以指定自字符串开头【前缀】 ***
endswith():判断一个字符串是否是以指定自字符串结尾【后缀】
'''
isalpha():一个字符串非空并字符全部是字母才返回True ,不推荐使用
isalnum():一个字符串非空并字符是字母或者数字才返回True ,不推荐使用
isupper()/islower()/istitle():和upper,lower,title有关 *******
isdigit()/isdecimal():一个字符串非空并字符全部是数字才返回True *******
startswith();判断一个字符串是否是以指定自字符串开头【前缀】 ********
endswith():判断一个字符串是否是以指定自字符串结尾【后缀】 *******
'''
# 1.前缀和后缀
str7 = 'today is a good day'
print(str7.startswith('today'))
print(str7.endswith('day'))
# 2.isupper()/islower()/istitle():
print('TFgwrg'.isupper())
print('T'.isupper())
print('T'.islower())
# 3.isdigit():判断一个字符串是否由数字字符组成
# 4.
'''
isalpha():一个字符串非空并字符全部是字母才返回True ,不推荐使用
isalnum():一个字符串非空并字符是字母或者数字才返回True ,不推荐使用
底层工作原理:依据的是ASCII码表,ASCII中有128个字符,其中不包含中文,如果是中文,上述两个功能会将中文识别为字母
如果要判断是否是数字字符,是否是字母字符,推荐使用isupper()/islower()/isdigit()/string模块
'''
str7 = '计算机'
print(str7.isalpha()) # True
编码和解码
# 八、编解码
'''
encode():编码
decode():解码
编码:将字符串类型转换为字节类型,实现:encode()/bytes(x)
解码:将字节类型转换为字符串类型,实现:decode()/str(x)
编码格式:
utf-8
gbk
注意:使用哪种格式进行编码,则必须使用哪种格式解码
'''
# 1.
# 字符串
s = 'abc'
print(type(s)) # <class 'str'>
s = b'abc'
print(type(s)) # <class 'bytes'>
# 2.编码
str81 = '431gwjhtk计算机'
# a
r1 = str81.encode(encoding='utf-8') # encoding设置编码格式
print(r1)
# b.
r2 = bytes(str81,encoding='gbk')
print(r2)
# 3.解码
# a.
r3 = r1.decode(encoding='utf-8')
print(r3)
# b.
r4 = str(r2,encoding='gbk')
print(r4)