python基础 - day7~8 字符串相关内容(转义字符、编码、格式化、方法)
1、什么是字符串
1)容器型的数据类型,以单引号/双引号/三个单引号/三个双引号作为容器的标志,每个字符就是字符串的元素
2)特点:不可变
有序的
元素 - 引号里的每个基本单元就是字符串的元素,又叫做字符(python中有字符的概念,但是没有字符这个数据类型,单个字符用长度为1的字符串来表示)
3)空字符串 - ‘’ :就用引号引起来,里面什么都没有4)不可变 - 不支持增删改
5)字符串是有序的 - 支持下标操作来获取数据
2、字符分类
1)转义字符
在特定的一个或多个符号前加\让符号具有特殊功能或者特殊意义。这种带有\字符就是转义字符:
\n - 换行
\t - 水平制表符(相当于按一下tab键)
’ - 表示一个普通的单引号
" - 表示一个普通的双引号
\ - 表示一个普通的\
转义字符 | 作用 |
---|---|
\n | 换行 |
\t | 水平制表符(相当于按一下tab键) |
\’ | 表示一个普通的单引号 |
\" | 表示一个普通的双引号 |
\\ | 表示一个普通的\ |
\u四位十六进制编码值 | 表示十六进制数对应编码对应的字符 |
2)普通字符
除了转义字符之外的都是普通字符,普通字符在字符串中表示本身
3)有个特殊的符号r
r的作用是使所有的转义字符串失效,变成普通字符,可以理解为反转义
3、字符编码d
什么是编码
计算机存储数据只能存储为数字(二进制补码),为了让计算机存储符号,我们为每个符号对应一个固定的数字,这个符号对应的固定数值就是这个字符对应的编码值
编码表 - 存储字符对应的编码值的表,包括:ASCII编码表、Unicode编码表
a、ASCII编码表
包含128个字符对应的编码值,主要包含美国的通用符号,包括:英文标点符号、数字字符、字母字符以及其他的特殊字符。在ASCII编码表中,大写字母(65 ~ 90)在前面,小写字母(97 ~ 122)在后面,中间还间隔着其他字符,大写字母和小写字母间隔32个字符
b、Unicode编码表
ASCII编码表包含在Unicode编码表中,python使用的是Unicode编码表
中文的编码范围是:0x4e00~0x9fa5
chr(编码值) - 获取编码值对应的字符
ord(字符) - 获取字符对应的编码值
4、格式字符串
当字符串中有一个或者多个部分是变化的时候,我们可以用字符串的加法、格式字符串或者f字符串来实现这个功能。下面是几种格式化字符串的方法:
1)字符串加法
# 打印出‘春花今年28岁,目前月薪是8000’
name = '春花'
age = 28
money = 8000
str1 = name + '今年' + str(age) + ',目前月薪是' + str(money) + '元'
print(str1) # 春花今年28,目前月薪是8000元
2)格式字符串 - %
在字符串中用格式占位符来代替变化的部分,在后面用数据来给格式占位符赋值
有哪些格式占位符
格式占位符 | 对应的数据类型 | 应用 |
---|---|---|
%d | 整数 | print(‘打印整数:%d’ % 3) #打印整数:3 |
%s | 字符串(可以是其他数据) | print(‘打印字符串:%s’ % ‘abc’) # print(‘打印字符串:%s’ % ‘abc’) |
%f | 浮点数 | print(‘打印浮点数:%f’ % 1.234) # 打印浮点数:1.234000 |
%.Nf | 浮点数保留N位小数 | print(‘打印浮点数:%.2f’ % 1.234) # 打印浮点数:1.23 |
%c | 字符/字符编码值 | print(‘打印字符:%c’ % 0x4e00) # 打印字符:一 |
name = '春花'
age = 28
money = 8000
str2 = '%s今年%d岁,目前月薪是%.2f元' % (name, age, money)
print(str2) # 春花今年28岁,目前月薪是8000.00元
3)format格式化字符串
- a.{}
- b.{下标}
- c.{key}
格式约束:{:约束条件}、{下标:约束条件}、{key:约束条件}
- .Nf - 保留N位小数
- 符号>N - 约束数据宽度为N,不够的在数据前面补充符号
- 符号<N - 约束数据宽度为N,不够的在数据后面补充符号
,
- 将数字三位一组用,
隔开- .N% - 将数字转换为百分数,转换后默认保留6位小数,如果有
.N
转换后则保留N位小数
name = '春花'
age = 28
money = 8000
str3 = '{}今年{}岁,目前月薪是{:.2f}元'.format(name, age, money)
str4 = '{1}的年龄是{0},今年{0}岁'.format(age, name)
str5 = '{name}的年龄是{age},今年{age}岁'.format(age=age, name=name)
print(str3, str4, str5, sep='\n')
'''
春花今年28岁,目前月薪是8000.00元
春花的年龄是28,今年28岁
春花的年龄是28,今年28岁
'''
print('{:.5f}'.format(10000000)) # 10000000.00000
print('{:x>12}'.format(10000000)) # xxxx10000000
print('{:x<12}'.format(10000000)) # 10000000xxxx
print('{:%}'.format(10000000)) # 1000000000.000000%
print('{:.2%}'.format(10000000)) # 1000000000.00%
4)f-string - format方法的简写
格式约束与format方法一致,在{}的冒号前可进行数学运算,写法上比format简洁很多,具体如下
name = '春花'
age = 28
money = 8000
str6 = f'{name}今年{age}岁,目前月薪是{money}元'
str7 = f'{name}今年{age+10}岁,目前月薪是{money*2}元'
str8 = f'{name}今年{age*2:0>5}岁,目前月薪是{money+50.22222:.2f}元'
print(str6, str7, str8, sep='\n')
'''
春花今年28岁,目前月薪是8000元
春花今年38岁,目前月薪是16000元
春花今年00056岁,目前月薪是8050.22元
'''
5、字符串方法
1)统计
字符串1.count(字符串2[, 开始位置, 结束位置])
:统计在字符串1的指定位置之间有多少个字符串2
print('How are you? i am fine, Thank you, and you?'.count('you', 0, 20)) # 1
print('How are you? i am fine, Thank you, and you?'.count('you')) # 3
2)查找
字符串1.find(字符串2[, 开始位置, 结束位置])
- 字符串1中不存在字符串2不报错
字符串1.index(字符串2[, 开始位置, 结束位置])
- 字符串1中不存在字符串2报错
# 返回在指定区间you第一次出现时的下标(即区间内最小的下标值)
print('How are you? i am fine, Thank you, and you?'.find('you', 0, 20)) # 8
# 返回从右往左you第一次出现时的下标(即区间内you最大的下标值)
print('How are you? i am fine, Thank you, and you?'.rfind('you')) # 39
注:在字符串1的指定位置查找字符串2的位置,返回下标(index 和 find除了字符串2不存在时不一致,其他用法和效果都一样)
3)列表转字符串
字符串1.join(序列)
:用字符串1将序列2中的每个元素连接成一个字符串(序列中的每个元素都需要是字符串)
str(数据)
- 将数据转化成字符串,所有的序列都能转,转化后数据里的每个符号都是一个元素(包括[({,
等等符号)
# 练习:将列表中的元素拼接在一起
# 这种方式是将列表的每一个符号都转化成字符串的一个元素,并不是我们需要的
list1 = [1, 34, 34, 87]
list2 = ['sdg', 'dger', 'say']
print(str(list1), str(list2)) # '[1, 34, 34, 87]' '['sdg', 'dger', 'say']'
# 用join只是将序列里的元素用字符串1联合在一起,不包括里面的非元素符号
str1 = ''.join([str(x) for x in list1])
str2 = ''.join(list2)
print(str1, str2) # '1343487' 'sdgdgersay'
4)替换
字符串1.replace(字符串2, 字符串3[, N])
:将字符串1中前N个字符串2替换成字符串3(N没有就是默认全部)
str1 = 'How are you? i am fine, Thank you, and you?'
print(str1.replace('you', 'YOU', 1)) # How are YOU? i am fine, Thank you, and you?
print(str1.replace('you', 'YOU')) # How are YOU? i am fine, Thank YOU, and YOU?
5)切割
字符串1.split(字符串2[, N]):在字符串1中用字符串2作为切割点进行切割,切割的结果是字符串列表(列表里不包含切割点),N有值表示选择字符串1中前N个字符串2作为切割点,省略则默认全部字符串2作为切割点
str1 = 'How are you? i am fine, Thank you, and you?'
print(str1.split('you')) # ['How are ', '? i am fine, Thank ', ', and ', '?']
print(str1.split('you', 1)) # ['How are ', '? i am fine, Thank you, and you?']
6)填充 - 左/右
字符串.zfill(N) - 将字符串转化成长度为N的新字符串,原字符串在左边,右边用0填充
字符串.ljust(N, 填充值) - 将字符串转化成长度为N的新字符串,原字符串在右边,左边用填充值填充
print('填充'.zfill(10)) # 00000000填充
print('填充'.ljust(10, 'x')) # 填充xxxxxxxx