python之字符串操作

前言

前面我们学习了python的基础语法和流程控制,但是对于一些数据,我们无法处理,如我们要在一段字符串中取出我们想要的字符,那该怎么办呢?接下来我们就来学最常用的字符串。

什么是字符串

字符串是字符序列。在python中用单引号或者双引号括起来的都是字符串。
如下

# 单引号
str1 = '我是字符串'
# 双引号
str2 = "我是字符串"

# 连续的三个引号
str3 = '''我是字符串'''
str4 = """我是字符串"""

字符串的索引

什么是索引?如我们把酒店的每个房间看作是值,那么房间号就是索引,通过房间号找到房间。我们可以通过索引(从左至右)找到值。索引是从0开始。
在这里插入图片描述
索引也可以是负数,从右往左计数,从-1开始。

值1值2值3值4值n
索引-n-(n-1)-(n-2)-(n-3)-1

实例

string = 'abcdefg'
print(string[0]) # a
print(string[1]) # b

print(string[-1]) # g
print(string[-2]) # f

字符串的切片

切片就是访问某个范围内的所有值,索引只能访问一个值,而切片访问多个。

# 语法
string[start:end:step]
# start:开始的位置 默认为0
# end: 结束的位置
# step: 切片的步长 默认为1

string = 'abcdefg'
print(string[:2]) # ab
# range()函数一样 包头不包尾 只提取索引 0 1 的值
# 如果想提取所有  start和end都不写
# stirng[:]

print(string[::-1]) #gfedcba 顺序颠倒

字符相加

字符串的相加,两种同类型的字符串可以相加。

string1 = 'asdf'
string2 = 'asdc'
string3 = string1 + string2
print(string3)

字符串相乘

字符串*n会重复n次,如

stirng = 'asdf'
print(stirng*3)

字符串长度

在python中用len()函数来计算字符串长度,无论是英文、数字还是汉字,所有字符按一个字符计算。

string = 'asf'
print(len(string)) # 3

判断子字符串是否在父字符串中

有三种方法判断子字符是否在父字符串中

# 第一种
# 用 str in strs
strs = 'asf'
print('a' in strs)  # True

# 第二种
# str.find(str, strat=0, end=len(string))方法
# find() 方法检测字符串中是否包含子字符串 str ,如果指定 strat(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。 如果没有不会报错
strs = 'asf'
print(strs.find('d')) # -1
print(strs.find('a')) # 索引值 0

# 第三种
# index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。

strs = 'asf'
print(strs.index('a')) # 索引值 0
print(strs.index('d')) # 会报错


分割和合并字符串

  • 分割字符串
    python中的split()方法,可以指定分割字符串,把要分割的字符串分割为列表。
# str.split(sep,maxsplit)
# str:要分割的字符串
# sep:分割字符串
# maxsplit:分割次数
# 会返回切割好的列表
string = '人生苦短,我学python'
print(string.split(','))

# 如果不指定切割符,将默认空格切割

  • 合并字符串
    与分割字符串相反,将多个字符串采用固定的分隔符连接在一起。

# string = str.join(ite)

data = ['天天','501','欢迎','大家']
# 以空格合并
s = ''.join(data)
print(s)
# 天天501欢迎大家

# 以*合并
s1 = '*'.join(data)
print(s1)
# 天天*501*欢迎*大家

字符串常用方法

count()方法

count()统计指定一个字符串在另一个字符串中出现的次数。

# str.count(sub,start,end)
# sun:要查找的字符串
# start和end: 指定范围查找
string = 'asfdsaf'
print(string.count('a'))
# 2

# 指定范围
print(string.count('a', 1, 4))
# 0

字母大小写转换

  • lower()
    lower()将所有字母转化为小写,返回转化后的字符,如果没有会原字符串返回。如下
# str.lower()
string = 'ASFSa'
s = string.lower()
print(s)
  • upper()
    upper()将所有字母转化为大写,返回转化后的字符,如果没有会原字符串返回。如下
# str.upper()
string = 'ASFSa'
s = string.upper()
print(s)

去除字符串中的空格和特殊字符

  • strip()
    strip()方法用于去掉字符串左右两侧的空格和特殊字符。
# str.strip(chars)
# chars:如果不填 默认会去除\t、\n等
string = '\tasf\n'
print('原;', string)
print('去除后:', string.strip())

# 指定去除字符 只能去除左右
string1 = '@12131@12@'
print('原;', string1)
print('去除后:', string1.strip('@'))

  • lstrip()
    lstrip()方法用于去掉字符串左侧的空格和特殊字符。
# str.strip(chars)
# chars:如果不填 默认会去除\t、\n等
string = '\tasf\n'
print('原;', string)
print('去除后:', string.lstrip())

# 指定去除字符 只能去除左侧
string1 = '@12131@12@'
print('原;', string1)
print('去除后:', string1.lstrip('@'))

  • rstrip()
    rstrip()方法用于去掉字符串右侧的空格和特殊字符。
# str.strip(chars)
# chars:如果不填 默认会去除\t、\n等
# 去除右侧空格和特殊字符
string = '\tasf\n'
print('原;', string)
print('去除后:', string.rstrip())

# 指定去除字符 只能去除右侧
string1 = '@12131@12@'
print('原;', string1)
print('去除后:', string1.rstrip('@'))

字符串的格式化

字符串格式化先制定一个模板,留几个空位,然后根据需要填上内容。那些空位用指定的字符占好位置。如下


string = '天天'
string1 = '感谢!'
s = f'关注{string},十分{string1}'
print(s)
# 关注天天,十分感谢!

python中使用format()方法进行字符串格式化。

string = '{}{}'.format(a1,a2)
# {}里可以对格式进行控制

现在详细介绍{参数序号:格式控制}里的参数

参数序号:填充对齐宽度.精度类型
索引引号符号用于填充的单个字符对齐的方式输出的宽度保留位数指定类型
						format()方法的格式字符
格式化字符解释
d十进制整数
b将十进制整数转换为二进制
o将十进制整数转换为八进制
x或·X将十进制整数转换为十六进制
f或F保留小数位
string1 = '我有{:.3f}元'.format(1000)
# 保留三位小数  一定要加 . + 几位 + f
print(string1)

# {0:}中 0 代表 format(arg) 中的 arg
# 以此类推 {1:}代表format(arg1,arg2) 中arg2
# 如果不指定参数 将会默认从左至右自动分配 
string2 = '{0:}的8进制是:{0:o}'.format(20)
print(string2)

# < 居左
# > 居右
# ^ 居中
# 填充字符为 -
# 居中 ^
# 宽度为 3 个字符
string3 = '居{:-^3}中'.format('a')
print(string3)
# 居-a-中



# format可以简写,如下

name = '天天501'
# 字符串前面加f 效果是一样的
string = f'关注{name}'
print(string)

其实字符串格式化方法会简单的运用就行,不需要记住,了解就行,需要用的时候查一下,孰能生巧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天501

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值