03-字符串用法详解

本文深入探讨Python字符串的使用,包括其不可变性、分片、连接、赋值、遍历和成员测试。此外,还介绍了字符串的查找与替换(find和replace方法)、提取与连接(split和join方法)、格式化输出以及转义处理。通过实例展示了如何处理字符串,如查找子串、拆分和连接、格式化数字输出以及转换字符串与数字类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.本集概览

1.字符串本质上是不可更改的有序字符容器
2.字符串常用操作:分片、连接、赋值、遍历等
3.字符串进阶操作:查找、替换、提取、连接与空白去除
4.字符串的格式化输出与类型转换
5.转义字符与原始字符串

Python中一项很重要的工作就是进行文本处理,与之紧密相关的数据类型是字符串,这一集,我们由浅入深介绍一系列关于字符串的使用内容。

1.字符串的容器本质

前面刚刚介绍了容器,字符串本质上也可以理解为字符的容器。他就是由单个字符组成的有序序列,且不可修改。

类比前面提到的列表,如正向索引、反向索引、分片索引等基于偏移量的基本操作,字符串都是支持的。

1.1.字符串的分片操作

下面列举一些与列表类似的操作,需要强调一点的是字符串的分片操作,分片就是从一整个字符串中分离提取出一部分内容(即子字符串),从而获取所需的部分数据,并且python返回的是包含所获取元素的新对象。

分片操作在实际使用时用处很多,比如:我们可以在命令行字符串中去分离感兴趣的参数列表
代码片段:

s = 'abcdefg'
print(s[0])
print(s[-2])
print(s[1:4])
print(s[1:4:2])
print(s[-1:1:-1])
print(len(s))

运行结果:

a
f
bcd
bd
gfedc
7

1.2.字符串的不可修改特性

再来看看字符串的不可修改特性。
代码片段:

s = 'abcd'
s[0] = '4'

运行结果:

Traceback (most recent call last):
 File "E:/12homework/12homework.py", line 2, in <module>
   s[0] = '4'
TypeError: 'str' object does not support item assignment

1.3.字符串的连接

再说说两个字符串之间的连接操作。即所谓的字符串相加,返回连接后生成的新字符串
代码片段:

s1 = 'abcd'
s2 = '1234'
s = s1 + s2
print(s)

运行结果:

abcd1234

1.4.字符串的赋值

那字符串的赋值,可能大家直观的想,也是用=直接赋值吧?对,不过针对赋值,有深拷贝浅拷贝两种意义截然不同的方式。

下面这种赋值方法实际上是对象的深拷贝,即:赋值左右的两个对象具有相同值,但是是位于不同内存片区的对象。
代码片段:

s = ['abcdefg']
a = s[:]
print(a)
print(s is a)

运行结果:

['abcdefg']
False

而如果是像下面这样直接赋值,则左右两个对象实际上被分配的是同一个内存空间,即所谓的浅拷贝:
代码片段:

s1 = 'abcdefg'
s2 = s1
print(s1 == s2)

运行结果:

True

1.5.字符串的遍历与成员测试

字符串作为一种序列,当然也能进行遍历和成员关系测试。可以使用for语句在一个字符串中进行循环迭代,并使用in操作符对字符和子字符串进行成员关系的测试
代码片段:

s = 'hacker'
for c in s:
    print(c, end=' ')

运行结果:

h a c k e r 

代码片段:

print('k' in 'school')

运行结果:

False

以上都是字符串与容器相类似的一些操作,有之前的基础,接受起来还是挺容易的,下面我们再详细解析一下字符串的一些进阶用法

2.字符串进阶用法

2.1.字符串的查找与替换

没问题,首先我们说说python文本处理的头号工具:字符串的查找与替换。就类似于在word里常用的ctrl+f那个功能。

2.1.1.find查找方法

字符串的find方法实现子字符串查找的操作,如果包含待查找的子字符串,find方法就返回他的偏移值,如果没有找到,就返回-1
代码片段:

s = 'abcdef'
print(s.find('cde'))
print(s.find('xy'))

运行结果:

2
-1

2.1.2.replace替换方法

替换操作运用的是replace方法,参数是原始子字符串和用于替换的子字符串,之后进行全局搜索并替换。
代码片段:

s = 'abcdef'
print(s.replace('bcd','XXX'))

运行结果:

aXXXef

第三个参数表示替换的次数,如果不设置就表示全部替换,否则就表示替换前几个

2.2.字符串的提取与连接

2.2.1.split提取方法

再一个就是字符串的提取功能,用split方法。利用字符串中存在的分隔符,将其拆分成子字符串,并返回其所组成的列表,这个在文本获取及解析的过程中是非常有用的。
代码片段:

s = 'Tom,21,USA,UCLA'
l = s.split(',')
print(l)

运行结果:

['Tom', '21', 'USA', 'UCLA']

如果这些字符是空格隔开的,方法也是一模一样的
代码片段:

s = 'Tom 21 USA UCLA'
l = s.split(' ')
print(l)

运行结果:

['Tom', '21', 'USA', 'UCLA']

2.2.2.join连接方法

那反过来,如果要将列表中的元素连接成一个字符串呢,那也有对应的方法,即join方法。他使用指定的分隔符将列表中的元素连接成一个字符串,并用指定的分隔符对其进行分割

这里的分隔符可以是一个空字符,相当于直接连接:
代码片段:

L = ['s', 'p', 'a', 'm', 'm', 'y']
s = ''.join(L)
print(s)

运行结果:

spammy

也可以实际指定一个分隔符,如“-”:
代码片段:

L = ['s', 'p', 'a', 'm', 'm', 'y']
s = '-'.join(L)
print(s)

运行结果:

s-p-a-m-m-y

2.2.3.strip去空字符方法

如果字符串的两侧有空格、回车换行等,则可以用strip方法将这些“非内容”部分都去掉,使之变成一个“干货”
代码片段:

s = '    Tom 21 USA UCLA\n\n'
print(s)
print(s.strip())

运行结果:

Tom 21 USA UCLA


Tom 21 USA UCLA

从结果看,字符串左侧的空格和右侧的换行,都被去掉了。

3.字符串的格式化输出

我们再来谈谈字符串的格式化输出。

python中字符串的格式化输出我觉得非常好用,因为我们并不是总能一开始就能获得一个信息完备的字符串常量,很多关键信息是在运行时从其他地方获取并需要动态赋值的

3.1.默认情况

比如就说我吧,名字是酱油哥,29岁老叔叔,本硕毕业于HUST和THU。如果这里面的关键个人信息都是在运行的过程中赋值的,那该怎么用呢?看看这个例子:
代码片段:

name = '酱油哥'
age = 29
school = ['HUST','THU']
s = 'name:{},age:{},and graduates from{}'.format(name,age,school)
print(s)

运行结果:

name:酱油哥,age:29,and graduates from['HUST', 'THU']

这里我们不难发现,每一个花括号就是一个占位符,后面的变量依次进行对应,最关键的是,这三个变量分别是不同的对象类型,甚至还有一个列表对象,但是在字符串格式化时不需要我们对此进行任何的区分、处理。

至于说占位符和格式化方法中各参数的对应关系,上面使用的是默认的情况,即:按顺序、一一对应。

3.2.显式指明占位符顺序

当然,也可以显式的指明各个占位符的顺序
代码片段:

template = '{1},{0} and {2}'
s = template.format('spam', 'ham', 'eggs')
print(s)

运行结果:

ham,spam and eggs

3.3.按照键的顺序对应排列

也可以按照键的顺序进行对应排列,这一种感觉用的更常见一些
代码片段:

template = '{key1},{key2} and {key3}'
s = template.format(key1 = 'spam', key2 = 'ham', key3 = 'eggs')
print(s)

运行结果:

spam,ham and eggs

3.4.特殊的数字输出案例

在格式化的方法中,还包括一些特殊的数字输出的案例,我们重点说两个,一个是浮点数指定位数输出,一个是二进制数输出

比如,这个例子,我们保留两位小数输出浮点数
代码片段:

template = 'float number = {:.2f}'
s = template.format(10.4567)
print(s)

运行结果:

float number = 10.46

再者,用二进制输出指定数据
代码片段:

template = 'number = {:b}'
s = template.format((2 ** 16) -1)
print(s)

运行结果:

number = 1111111111111111

4.字符串的转义处理

4.1.斜杠转义

最后,我们来谈谈字符串中的转义符,碰到斜杠进行转义,这是一个常识,常见的一个例子:
代码片段:

s = 's\tp\nam'
print(s)

运行结果:

s p
Am

转义字符有很多,但是我并不是想着重说这个,因为学过C语言的都对此有所了解,大不了要用的时候再去查嘛。

4.2.原始字符串

这里要说一下python里的一个反其道而行之的方法,就是原始字符串:

如果想表达一个文件名的时候,转义字符反而会引入麻烦,里面的\n和\t都会被换行符和制表符所替代,此时我们不需要转义,倒是想所见即所得,这就得使用raw字符串,在字符串前加一个r就能关闭转义机制。
代码片段:

s = r'c:\new\test.py'
print(s)

运行结果:

c:\new\test.py

4.3.数字与字符串的转换

Python的方便之处就体现在许多这样的小细节上,我们来谈谈字符串、int类型和浮点类型的转换。

设想这么一个背景,如果脚本从文件或用户界面得到一个文本字符串形式的数字,则需要使用转换工具进行预先处理,否则会报错。
代码片段:

s = '19'
i = 3
print(s+i)

运行结果:

Traceback (most recent call last):
 File "E:/12homework/12homework.py", line 3, in <module>
print(s+i)
TypeError: Can't convert 'int' object to str implicitly

正确的做法是:

将字符串转换为int型
代码片段:

s = '19'
i = 3
print(int(s) + i)

运行结果:

22

将int型转换为str型
代码片段:

s = '19'
i = 3
print(s + str(i))

运行结果:

193

字符串和浮点数转换的方法是
代码片段:

print(float('1.5'), str(4.56))

十进制int和二进制直接的转换
代码片段:

print(bin(12))
print(int('1110',2))

运行结果:

0b1100
14

有了这些函数,我们就能十分方便的实现这些转换功能了。

5.小结

说实话,不太喜欢类似这一集的知识内容,感觉知识点很琐碎也很刻板。不过没办法,都是应用所必须的,那就请大家多加练习吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

石 溪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值