字符串方法介绍
本文作者:田志凡
文字编辑:宁刘莹
技术总编:张 邯
本文将介绍Python中字符串对象的各种方法,这些方法实现了对字符串的查找、替换、分割、拼接、填充、删除、判断等基本操作。方法虽然众多,但语法模式基本一致,读者在使用的过程中,根据需要来选择合适的方法即可。
我们从网上找到如下两个字符串来进行展示,str1为中文字符串,str2为英文字符串。
In [1]: str1 = '''我国地域辽阔,花卉种类繁多,能够被全国人民普遍接受的,主要集中在牡丹、梅花、菊花、兰花、月季、茶花、 荷花等大众化花卉上。这些花卉各有特色,具有不同的历史传统和文化优势,众里挑一,确实不易。一些地方努力将本地特色花卉推选成国花,固然有弘扬本地花卉文化的初衷,也不排除有商业利益的考量。一旦被选为国花,将会被广泛种植、被大力商业开发,甚至形成庞大产业链,产生巨大经济效益,而拥有国花资源的地方,将成为最大赢家。'''
In [2]: str2 = '''The China Flower Association (CFA) said in a recent statement that the peony was recommended as China’s national flower, sparking heated debate online.'''
一、字符串方法之“查找”
(1)查找某字符串出现的次数
如下,我们查找大写英文字母“C”在str1和str2中出现的次数
In [3]: str1.count('C')
Out[3]: 0
In [4]: str2.count('C')
Out[4]: 3
结果如上,大写英文字母“C”在str1中出现了0次,在str2中出现了3次。
查找时,也可以指定位置,如下:分别表示从str2的索引值在[0,10)的区间,以及从10开始到最后(第三个参数不写则默认到最后)的区间,进行查找。
In [5]: str2.count('C',0,10)
Out[5]: 1
In [6]: str2.count('C',10)
Out[6]: 2
(2)查找某字符串出现的位置索引
index和find查找到最小位置的索引值,rindex查找到最大位置的索引值。如下,我们查找大写英文字母“C”在str1和str2中的索引值。
In [7]: str1.index('C')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
In [8]: str2.index('C')
Out[8]: 4
In [9]: str1.find('C')
Out[9]: -1
In [10]: str2.find('C')
Out[10]: 4
In [11]: str2.rindex('C')
Out[11]: 96
其中,find与index都返回了大写英文字母“C”在str1和str2中最小的索引值,不同之处在于,当找不到字母“C”时,index方法会报错,而find方法则返回-1。所以,为了保证程序的正常运行,一般建议使用find方法。
二、字符串方法之“替换”
(1)大小写转换
我们以英文字符串str2来演示。
capitalize :除字符串第一个字母外,其他的字母均转换为小写
lower :字符串中所有的字母均转换为小写
casefold :字符串中所有的字母均转换为小写
程序及结果如下:
In [12]: str2.capitalize()
Out[12]: 'The china flower association (cfa) said in a recent statement that the peony was recommended as china’s national flower, sparking heated debate online.'
In [13]: str2.lower()
Out[13]: 'the china flower association (cfa) said in a recent statement that the peony was recommended as china’s national flower, sparking heated debate online.'
In [14]: str2.casefold()
Out[14]: 'the china flower association (cfa) said in a recent statement that the peony was recommended as china’s national flower, sparking heated debate online.'
lower和casefold都可以使全部大写转换为小写,不同的地方在于lower只在26个英文大写字母A-Z范围内转换为小写,而casefold转换的范围更大,其他语言中的有大小写之分的字母,也可以转换为小写,如德语中的“ß”。
In [14]: str='''ß'''
In [15]: str.lower()
Out[15]: 'ß'
In [16]: str.casefold()
Out[16]: 'ss'
如上,使用casefold方法可将“ß”转换为小写,读者可以根据自己的需要选择合适的方法。
upper:将所有区分大小写的字符转换为大写
In [17]: str2.upper()
Out[17]: 'THE CHINA FLOWER ASSOCIATION (CFA) SAID IN A RECENT STATEMENT THAT THE PEONY WAS RECOMMENDED AS CHINA’S NATIONAL FLOWER, SPARKING HEATED DEBATE ONLINE.'
title:每个单词的首字母大写,其他字母小写
swapcase:大写字母转换为小写,小写字母转换为大写
程序及结果如下:
In [18]: str2.title()
Out[18]: 'The China Flower Association (Cfa) Said In A Recent Statement That The Peony Was Recommended As China’S National Flower, Sparking Heated Debate Online.'
In [19]: str2.swapcase()
Out[19]: 'tHE cHINA fLOWER aSSOCIATION (cfa) SAID IN A RECENT STATEMENT THAT THE PEONY WAS RECOMMENDED AS cHINA’S NATIONAL FLOWER, SPARKING HEATED DEBATE ONLINE.
(2)制表符转换为空格
首先生成含有制表符的字符串,然后进行转换,我们以两个字符串为例,如下:
In [20]: s='stata\tclub'
In [21]: s.expandtabs()
Out[21]: 'stata club'
In [22]: s='s\ttataclub'
In [23]: s.expandtabs()
Out[23]: 's tataclub'
如上,制表符和空格难以直接区分,我们将其复制到sublime文本编辑器中观察。下图中,横线为制表符,“…”为空格。
使用expandtabs方法将制表符转换为空格时,填充空格的下一个位置是制表符单位开始的位置,默认的制表符单位为8,此时制表符开始的位置在0,8,16……等位置。图中可以看出,制表符转换为空格后,空格的下一个位置都是8。
此外,默认的制表符单位8也可以修改,只要在expandtabs()中添加数字即可。
(3)指定字符替换
replace:将字符串中的某个子字符串替换为另外的字符,可指定转换次数。
translate:根据一个映射的表格,将字符串中存在于映射表格中的单位字符进行替换。
举例如下:
In [24]: str2.replace('China','AAAAA')
将str2中出现的“China”字符串全部替换成“AAAAA”字符串。
Out[24]: 'The AAAAA Flower Association (CFA) said in a recent statement that the peony was recommended as AAAAA’s national flower, sparking heated debate online.'
使用replace方法也可以指定转换的次数,表示从左到右最先出现的几个,比如我们指定1,如下:
In [25]: str2.replace('China','AAAAA',1)
Out[25]: 'The AAAAA Flower Association (CFA) said in a recent statement that the peony was recommended as China’s national flower, sparking heated debate online.'
这样就只转换了前1个“China”字符串。
而使用translate方法,与replace不同,首先要生成一一对应的映射表格,如下:
In [26]: transtable=str.maketrans('China','AAAAA')
transtable为字典类型,前后的两个字符串的长度要一致,左侧的字母一一对应右侧的字母,如下:
C—A
h—A
i—A
n—A
a—A
接下来我们使用translate方法进行转换:
In [27]: str2.translate(transtable)
Out[27]: 'TAe AAAAA Flower AssocAAtAoA (AFA) sAAd AA A receAt stAtemeAt tAAt tAe peoAy wAs recommeAded As AAAAA’s AAtAoAAl flower, spArkAAg AeAted debAte oAlAAe.'
结果如上,只要出现在左侧的任意一个字母,都转换为映射到右侧的字母。
由于篇幅限制,本期推文暂时介绍这么多,在下期推文中,我们会继续介绍常见的字符串方法,并对其做一个总结。
对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐
Jupyter Notebook的使用
Stata16新功能之“框架”——frlink连接多个数据集(3)
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。