1. 概述
由多个字母,数字,特殊字符组成的有限序列
字符串的定义:可以使用一对单引号或者双引号,也可以一对三个单引号或者一对三个双引号定义字符串。
注意:没有单符号的数据类型'a' "a"
代码演示:
# 创建字符串
str = "apple"
str1 = 'orange'
print(type(str),type(str1))
2. 字符串特殊处理
字符串前加 r:r" " 的作用是:去除转义字符.
即如果是“\n”那么表示一个反斜杠字符,一个字母n,而不是表示换行了。以r开头的字符,常用于正则表达式,对应着re模块。
字符串前加f:以 f开头表示在字符串内支持大括号内的python 表达式
print(f'{name} done in {time.time() - t0:.2f} s')
字符串前加b:b" "前缀表示:后面字符串是bytes 类型。网络编程中,服务器和浏览器只认bytes 类型数据。
字符串前加u:u""的作用是:含有中文字符组成的字符串。
后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。
3. 切片
下标:也叫索引(index),表示第几个数据在程序中,下标一般从0开始,可以通过下标获取指定位置的数据
代码演示:
# 字符串获取
s1 = 'ABCDEFG'
print(s1[4])
print(s1[0])
print(s1[-1])
'''
字符串索引机制:
1.0~len(s)-1
2.-len(s)~1
'''
执行结果:
切片:从字符串中复制一段指定的内容,生成一个新的字符串
切片的语法:
字符串变量[start:end:step]
- start:表示开始下标,默认从0开始
- end:表示结束下标
- step:表示步长
代码演示:
s = 'ABCDEFG'
# 从左往右(0 ~ n-1)
print(s[1:4]) # BCD
print(s[0:6]) # ABCDEF;0可以省略不写
print(s[:6]) # ABCDEF
print(s[4:7]) # EFG
# 从右往左(-n ~ -1)
print(s[-3:-1]) # EF;
print(s[-3:]) # EFG
print(s) # 打印所有元素
print(s[:]) # 打印所有元素
print(s[::]) # 打印所有元素
print(id(s)) # 1622530964336
print(id(s[:])) # 1622530964336
print(id(s[::])) # 1622530964336
print(s[1:-1]) # BCDEF
print(s[:-1:2]) # ACE
print(s[:-2:4]) # AE
print(s[::4]) # AE
print(s[::-2]) # GECA
4. 查找(find)
- find:从左向右查找,只要遇到一个符合要求的则返回位置,如果没有找到任何符合要求的则返回-1
- rfind:从右向左查找,只要遇到一个符合要求的则返回位置,如果没有找到任何符合要求的则返回-1
代码演示:
path = 'https://mp.csdn.net/mp_blog/creation/editor?spm=1001.2014.3001.4503'
i = path.find('_')
print(i)
image_name = path[i + 1:]
print(image_name)
# 查找#
j = path.find('#')
# m = path.index('#')
print(j)
# rfind = right find
# 从右往左查找
i = path.rfind('.')
zhui = path[i:]
print(zhui)
执行结果:
5. 获取长度(len)和次数(count)
代码演示:
str3 = "凡哥,'这次车翻的有点厉害'"
# 获取字符串的长度 len()
print(len(str3)) # 14
# count() 在整个字符串中查找子字符串出现的次数
str1 = "电脑卡了,ss电脑呢?"
print(str1.count("电脑")) # 2
# 在指定区间内查找出现的次数
print(str1.count("电脑", 5, 30)) # 1
6. 判断
代码演示:
# startswith,endswith,isalpha,isdigit,isalnum,isspace
# 返回值都是布尔类型的:(True,False)
path = 'https://mp.csdn.net'
result = path.startswith('ht') # 判断是否是xxx开头的
print(result)
result = path.endswith('mp4') # 判断是否是以xxx结尾的
print(result)
s = 'HELLO'
result = s.isalpha() # 判断是否全部字母组成的
print(result)
s = '100'
result = s.isdigit() # 判断是否全部数字组成
print(result)
s = "A1234"
result = s.isalnum() # 判断只有字母和数字组成
print(result)
s = ' '
result = s.isspace() # 判断字符串是否空格
print(result)
s = 'HELLO'
result = s.isupper() # 判断是否全部大写字母
print(result)
s = 'hello'
result = s.islower() # 判断是否全部小写字母
print(result)
7. 替换(replace)
语法格式:
replace(old, new, count) 默认全部替换,也可以通过count指定次数
代码演示;
# 替换
str2 = "李白在杜甫家喝酒,杜甫喝大了,李白竟然没事,杜甫直接倒头就睡!"
r2 = str2.replace('杜甫', "孟浩然", 2)
print(r2)
执行结果:
8. 切割(split)
代码演示:
# 切割
str3 = '天道酬勤,勿以善小而不为,勿以恶小而为之'
r3 = str3.split(',', 3) # 以逗号分割,默认空格分割
print(r3)
9. 转换大小写
代码演示:
# 每个单词首字母大写
e = 'hello world'
result = e.title()
print(result)
# 每个单词大写
result =e.upper()
print(result)
# 每个单词小写
result = e.lower()
print(result)
# 第一个单词首字母大写
result = e.capitalize()
print(result)
10. 空格处理
代码演示:
# strip 除去左右两侧空格
s = ' admin '
print(len(s))
result = s.strip()
print(result)
print(len(result))
print('*-' * 30)
# lstrip 除去左两侧空格
result = s.lstrip()
print(result)
print(len(result))
print('*-' * 30)
# rstrip 除去右两侧空格
result = s.rstrip()
print(result)
print(len(result))
print('*-' * 30)
# center 居中
s = 'hello world'
result = s.center(54)
print(result)
print('*-' * 30)
# ljust 左对齐
result = s.ljust(30)
print(result)
print('*-' * 30)
# rjust 右对齐
result = s.rjust(60)
print(result)
11. 格式化
代码演示:
name = '关羽'
age = 45
result = '中年{}今天{}岁!'.format(name, age)
print(result)
# 使用数字填充,从0开始计数
result = '中年{0}今天{1}岁,刚好曹操今年和{0}同岁!'.format(name, age)
print(result)
# 变量名的形式,formation的参数必须是关键字参数
result = '中年{name}今天{age}岁,刚好曹操今年和{name}同岁!'.format(name='关羽', age=45)
print(result)
print(f'中年{name}今天{age}岁,刚好曹操今年和{name}同岁!')
执行结果:
12. 编码(encode)和解码(decode)
# encode() 编码
# decode() 解码
s2 = "君子以自强不息"
# b'\xe5\x90\x9b\xe5\xad\x90\xe4\xbb\xa5\xe8\x87\xaa\xe5\xbc\xba\xe4\xb8\x8d\xe6\x81\xaf'
print(s2.encode())
# b'\xe5\x90\x9b\xe5\xad\x90\xe4\xbb\xa5\xe8\x87\xaa\xe5\xbc\xba\xe4\xb8\x8d\xe6\x81\xaf'
print(s2.encode("utf-8"))
# b'\xbe\xfd\xd7\xd3\xd2\xd4\xd7\xd4\xc7\xbf\xb2\xbb\xcf\xa2'
print(s2.encode("gbk"))
# # 解码
s3 = b'\xe5\x90\x9b\xe5\xad\x90\xe4\xbb\xa5\xe8\x87\xaa\xe5\xbc\xba\xe4\xb8\x8d\xe6\x81\xaf'
print(s3.decode()) # 君子以自强不息
13.ASCII码转换
chr() 将对应的ASCII码的值转换为对应的字符
ord() 获取对应字符的ASCII的值
print(chr(68)) # D
print(ord("a")) # 97