几个Python字符串方法浅析

简介:

字符串提供了一系列的方法去实现复杂的文本处理任务。方法就是与特定的对象关联在一起的函数。方法调用同时进行了两次操作:

第一次:属性读取——具有object.attribute格式的表达式可以理解为“读取object对象的属性attribute的值”;

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

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

这里,着重介绍这样几个方法:find、join、replace、split。

1、find方法:

使用方法: S.find( sub, [ , start, [ , end]])

注:对于上面使用格式的说明:[]表示参数可选,未用此[]包含的参数为必须指定的参数。

find方法返回在子字符串出现处的偏移(默认从前向后开始搜索)或者未找到时返回-1。

>>> s = 'xxxxspamxxxxspamxxxx'
>>> where = s.find('spam')
>>> where
4

现在,如果我们试图去实现这样一个替换操作:将s字符串的spam字符串替换为eggs。

首先,如果仅仅是替换第一个spam,那么可以这样操作:

>>> s1 = s[:where] + 'eggs' + s[(where+4):]
>>> s1
'xxxxeggsxxxxspamxxxx'
>>>

但是假如我们希望完全替换所有的spam为eggs,那么,我们有如下的代码更改:

>>> s = 'xxxxspamxxxxspamxxxx'
>>> where = s.find('spam')
>>> while where != -1 :
... s = s[:where] + 'eggs' + s[(where+4):]
... where = s.find('spam')
... 
>>> s
'xxxxeggsxxxxeggsxxxx'
>>> 

这样的效率很低,代码量也很大,因此,我们可以使用replace方法:

2、replace方法:

使用方法:S.replace(old, new, [, maxsplit])

该方法的第一个参数是原始子字符串(任意长度),替换原始子字符串的字符串(任意长度),之后进行全局搜索并替换。

>>> s = 'xxxxspamxxxxspamxxxx'
>>> s.replace('spam', 'eggs')
'xxxxeggsxxxxeggsxxxx'
>>> s
'xxxxspamxxxxspamxxxx'
>>> 

在这里,有几个点需要说明:

(1)replace方法每次返回的字符串是一个新的字符串对象。由于字符串是不可变的,因此,每一种方法并不是真正在原处修改了字符串。

(2)我们可以通过控制第三个变量来实现只替换一次的目的:

>>> s.replace('spam', 'eggs', 1)
'xxxxeggsxxxxspamxxxx'
>>> 

3、join方法:

使用方法:S.join(seq)

join方法常常将字符串列表合并成一个字符串。

>>> s = 'spamy'
>>> l = list(s)
>>> l
['s', 'p', 'a', 'm', 'y']
>>> s
'spamy'
>>> 

如上所示,list可以将字符串分割成单字符列表,但是原字符串并未修改。join负责将列表字符合并成一个字符串。

>>> l
['s', 'p', 'a', 'm', 'y']
>>> s
'spamy'
>>> ''.join(l)
'spamy'
>>> '+'.join(l)
's+p+a+m+y'
>>> t = '***'
>>> t.join(l)
's***p***a***m***y'
>>> 

从这里,我们可以得出这样几个结论:

(1)join会将调用该方法的字符串(我们称之为分隔符)插入至合并字符串;

>>> '%'.join(['d','s','ld','f'])
'd%s%ld%f'

(2)通过上面的join实例,我们可以看出:分隔符的个数始终等于列表元素个数-1。

(3)合并后的字符串会存储在内存中,而不会修改列表对象。

4、split方法:

使用方法:S.split([seq, [, maxsplit]])

split方法分割字符串并将子字符串存储在列表(list)对象中。

>>> x = 'iperf -u -c 192.168.1.1'
>>> x.split()
['iperf', '-u', '-c', '192.168.1.1']
>>> x = 'iperf -u -c 192.168.1.1'
>>> x.split()
['iperf', '-u', '-c', '192.168.1.1']
>>> 

上面是split函数的默认使用情景,通过这些实例,我们可以看出,split默认方法的作用是以空格将字符串分割开来,而不管空格数是多少个(大于等于1个)。当然,通过上面的实例,我们可以看出,split默认方法常常用作命令行分析工具。

现在,对于可选参数,我们进行相关分析:

>>> s = 'www.baidu.com'
>>> s.split()
['www.baidu.com']
>>> s.split(',')
['www.baidu.com']
>>> s.split('.')
['www', 'baidu', 'com']

通过上面的代码,可选参数即为指定分隔符,用以将字符串分割的标志。另外,split默认方法是不能分离无空格字符串的。

现在,我们进行另一种尝试:

>>> s = r'www.baidu.com/zhidao/cpp/format/2015-1-5-22-10'
>>> s
'www.baidu.com/zhidao/cpp/format/2015-1-5-22-10'
>>> s.split()
['www.baidu.com/zhidao/cpp/format/2015-1-5-22-10']
>>> s.split('.')
['www', 'baidu', 'com/zhidao/cpp/format/2015-1-5-22-10']
>>> s.split(r'/')
['www.baidu.com', 'zhidao', 'cpp', 'format', '2015-1-5-22-10']
>>> s.split('-')
['www.baidu.com/zhidao/cpp/format/2015', '1', '5', '22', '10']
>>> s.split(['.','//','-'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected a character buffer object

对于上面的一个具有多个有意义分隔符的字符串时,我们如果试图同时获取所希望的数据,那么,通过在可选参数中设定list对象,是不行的。

很多时候,要得到多个分隔符分割的结果,使用正则表达式无疑是更好的选择。


目录
相关文章
|
22天前
|
测试技术 API Python
【10月更文挑战第1天】python知识点100篇系列(13)-几种方法让你的电脑一直在工作
【10月更文挑战第1天】 本文介绍了如何通过Python自动操作鼠标或键盘使电脑保持活跃状态,避免自动息屏。提供了三种方法:1) 使用PyAutoGUI,通过安装pip工具并执行`pip install pyautogui`安装,利用`moveRel()`方法定时移动鼠标;2) 使用Pymouse,通过`pip install pyuserinput`安装,采用`move()`方法移动鼠标绝对位置;3) 使用PyKeyboard,同样需安装pyuserinput,模拟键盘操作。文中推荐使用PyAutoGUI,因其功能丰富且文档详尽。
WK
|
8天前
|
Python
Python中format_map()方法
在Python中,`format_map()`方法用于使用字典格式化字符串。它接受一个字典作为参数,用字典中的键值对替换字符串中的占位符。此方法适用于从字典动态获取值的场景,尤其在处理大量替换值时更为清晰和方便。
WK
63 36
|
19天前
|
机器学习/深度学习 数据采集 数据挖掘
11种经典时间序列预测方法:理论、Python实现与应用
本文将总结11种经典的时间序列预测方法,并提供它们在Python中的实现示例。
56 2
11种经典时间序列预测方法:理论、Python实现与应用
|
24天前
|
Python
【10月更文挑战第6天】「Mac上学Python 11」基础篇5 - 字符串类型详解
本篇将详细介绍Python中的字符串类型及其常见操作,包括字符串的定义、转义字符的使用、字符串的连接与格式化、字符串的重复和切片、不可变性、编码与解码以及常用内置方法等。通过本篇学习,用户将掌握字符串的操作技巧,并能灵活处理文本数据。
50 1
【10月更文挑战第6天】「Mac上学Python 11」基础篇5 - 字符串类型详解
|
15天前
|
开发者 Python
Python中的魔法方法与运算符重载
在Python的奇妙世界里,魔法方法(Magic Methods)和运算符重载(Operator Overloading)是两个强大的特性,它们允许开发者以更自然、更直观的方式操作对象。本文将深入探讨这些概念,并通过实例展示如何利用它们来增强代码的可读性和表达力。
|
22天前
|
自然语言处理 Java 数据处理
【速收藏】python字符串操作,你会几个?
【速收藏】python字符串操作,你会几个?
46 7
|
27天前
|
Python
Python中的push方法详解与实例
Python中的push方法详解与实例
|
28天前
|
存储 Python
python列表操作和方法
python列表操作和方法
21 1
|
1月前
|
存储 索引 Python
反转Python列表的4种方法
反转Python列表的4种方法
|
23天前
|
Linux Python
Python获得本机本地ip地址的方法
【10月更文挑战第8天】 socket模块包含了丰富的函数和方法,可以获取主机的ip地址,例如gethostbyname方法可以根据主机名获取ip地址,gethostbyname_ex方法可以获得本机所有ip地址列表,也可以使用netifaces模块获取网卡信息。
23 0