返回介绍

字符串方法

发布于 2024-01-29 22:24:17 字数 3279 浏览 0 评论 0 收藏 0

除表达式运算符之外,字符串还提供了一系列的方法去实现更复杂的文本处理任务。方法就是与特定的对象相关联在一起的函数。从技术的角度来讲,它们附属于对象的属性,而这些属性不过是些可调用函数罢了。在Python中,表达式和内置函数可能在不同范围的类型有效,但方法通常特定于对象类型,例如,字符串方法仅适用于字符串对象。Python 3.0中某些类型的方法集有所交叉(例如,很多类型都有一个count方法),但它们仍然比其他的工具更加特定于类型。

更详细一点,函数也就是代码包,方法调用同时进行了两次操作(一次获取属性和一次函数调用):

属性读取

具有object.attribute格式的表达式可以理解为“读取object对象的属性attribute的值”。

函数调用表达式

具有函数(参数)格式的表达式意味着“调用函数代码,传递零或者更多用逗号隔开的参数对象,最后返回函数的返回值”。

将两者合并可以让我们调用一个对象方法。方法调用表达式对象,方法(参数)从左至右运行,也就是说Python首先读取对象方法,然后调用它,传递参数。如果一个方法计算出一个结果,它将会作为整个方法调用表达式的结果被返回。

通过本书这一部分的介绍可知,绝大多数对象都有可调用的方法,而且所有对象都可以通过同样的方法调用的语法来访问。为了调用对象的方法,必须确保这个对象是存在的。

表7-3概括了Python 3.0中内置字符串对象的方法及调用模式;这些经常有变化,因此,确保查看Python的标准库手册以获取最新的列表,或者在交互模式下在任何字符串上调用help。Python 2.6的字符串方法变化很小,例如,它包含一个decode,因为它对Unicode数据的处理有所不同(我们将在本书第36章中讨论Unicode数据)。在这个表中,S是一个字符串对象,并且可选的参数包含在方括号中。这个表中的字符串方法实现了分隔和连接、大小写转换、内容测试、子字符串查找和替换这样的高级操作。

正如你所看到的,确实有一些字符串方法,我们没有足够的篇幅全部介绍,参见Python的库手册或参考文献来了解所有的细节。为了帮助你入门,让我们来看一些展示了最常用的方法的代码,并随之介绍Python文本处理的一些基础知识。

字符串方法实例:修改字符串

我们知道字符串是不可变的,所以不能在原处直接对其进行修改。为了在已存在的字符串中创建新的文本值,我们可以通过分片和合并这样的操作来建立新的字符串。举个例子,为了替换一个字符串中的两个字符,你可以如下代码来完成:

但是,如果仅为了替换一个子字符串的话,那么可以使用字符串的replace方法来实现:

replace方法比这一段代码所表现的更具有普遍性。它的参数是原始子字符串(任意长度)和替换原始子字符串的字符串(任意长度),之后进行全局搜索并替换:

鉴于这样的角色,replace可以当作实现模板(例如,一定格式的信件)替换的工具来使用。注意到这次我们直接打印了结果而不是赋值给一个变量名——只有当你想要保留结果为以后使用的时候才需要将它们赋值给变量名。

如果需要在任何偏移时都能替换一个固定长度的字符串,可以再做一次替换,或者使用字符串方法find搜索的子字符,之后使用分片:

find方法返回在子字符串出现处的偏移(默认从前向后开始搜索)或者未找到时返回-1。如同我们在前面所见到的,这就像是in表达式中的一次子字符串查找操作,但是,find返回的是所找到的字符串的位置:

注意replace每次返回一个新的字符串对象。由于字符串是不可变的,因此每一种方法并不是真正在原处修改了字符串,尽管"replace"就是“替换”的意思!

合并操作和replace方法每次运行会产生新的字符串对象,实际上利用它们去修改字符串是一个潜在的缺陷。如果你不得不对一个超长字符串进行许多的修改,为了优化脚本的性能,可能需要将字符串转换为一个支持原处修改的对象。

内置的list函数(或一个对象构造函数调用)以任意序列中的元素创立一个新的列表——在这个例子中,它将字符串的字符“打散”为一个列表。一旦字符串以这样的形式出现,你无需在每次修改后进行复制就可以对其进行多次修改:

修改之后,如果你需要将其变回一个字符串(例如,写入一个文件时),可以用字符串方法join将列表“合成”一个字符串:

可能第一眼看上去连接方法有些陌生。因为它是用于字符串的方法(并非用于列表),是通过设定的分隔符来调用。join将列表字符串连在一起,并用分隔符隔开。这个例子中使用一个空的字符串分隔符将列表转换为字符串。一般地,对任何字符串分隔符和可迭代字符串都会是这样的结果:

实际上,像这样一次性连接子字符串比单独地合并每一个要快很多。请确保阅读了前面关于Python 3.0和Python 2.6中可变的bytearray字符串的提示,第36章还将详细介绍。由于有些情况下它会改变,它还为这种列表/连接合并操作提供了一种替换,以针对某些必须经常修改的文本。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文