python 字符串

字符串的定义

首先我们知道在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)

欢迎各路大佬前来讨论哦,一起学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值