几个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对象,是不行的。

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


目录
相关文章
|
2月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
106 3
|
3月前
|
测试技术 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,因其功能丰富且文档详尽。
|
2月前
|
Python
在 Python 中,如何将日期时间类型转换为字符串?
在 Python 中,如何将日期时间类型转换为字符串?
133 64
|
3天前
|
存储 人工智能 Python
[oeasy]python061_如何接收输入_input函数_字符串_str_容器_ 输入输出
本文介绍了Python中如何使用`input()`函数接收用户输入。`input()`函数可以从标准输入流获取字符串,并将其赋值给变量。通过键盘输入的值可以实时赋予变量,实现动态输入。为了更好地理解其用法,文中通过实例演示了如何接收用户输入并存储在变量中,还介绍了`input()`函数的参数`prompt`,用于提供输入提示信息。最后总结了`input()`函数的核心功能及其应用场景。更多内容可参考蓝桥、GitHub和Gitee上的相关教程。
7 0
|
1月前
|
安全
Python-打印99乘法表的两种方法
本文详细介绍了两种实现99乘法表的方法:使用`while`循环和`for`循环。每种方法都包括了步骤解析、代码演示及优缺点分析。文章旨在帮助编程初学者理解和掌握循环结构的应用,内容通俗易懂,适合编程新手阅读。博主表示欢迎读者反馈,共同进步。
|
1月前
|
存储 测试技术 Python
Python 中别再用 ‘+‘ 拼接字符串了!
通过选择合适的字符串拼接方法,可以显著提升 Python 代码的效率和可读性。在实际开发中,根据具体需求和场景选择最佳的方法,避免不必要的性能损失。
55 5
|
1月前
|
Python
使用Python计算字符串的SHA-256散列值
使用Python计算字符串的SHA-256散列值
55 7
|
1月前
|
JSON 安全 API
Python调用API接口的方法
Python调用API接口的方法
288 5
|
2月前
|
算法 决策智能 Python
Python中解决TSP的方法
旅行商问题(TSP)是寻找最短路径,使旅行商能访问每个城市一次并返回起点的经典优化问题。本文介绍使用Python的`ortools`库解决TSP的方法,通过定义城市间的距离矩阵,调用库函数计算最优路径,并打印结果。此方法适用于小规模问题,对于大规模或特定需求,需深入了解算法原理及定制策略。
59 15
WK
|
2月前
|
Python
Python中format_map()方法
在Python中,`format_map()`方法用于使用字典格式化字符串。它接受一个字典作为参数,用字典中的键值对替换字符串中的占位符。此方法适用于从字典动态获取值的场景,尤其在处理大量替换值时更为清晰和方便。
WK
122 36