python基础 - 8、字符串相关内容(转义字符、编码、格式化、方法)

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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值