Python中字符串和文本数据的分析
1. 学习目标
- 掌握取子字符串的方法
- 掌握字符串方法
2. 字符串
首先,创建两个字符串,如下所示:
#coding:utf-8
word1,word2 = 'Python','Java' #创建两个字符串
#打印上面创建的两个字符串
print(word1)
print(word2)
2.1 取子字符串和字符串切片
字符串其实可以看做一个“水杯”,只不过里面装的不是水,而是字符。为了说明,上面创建的两个字符串的内部关系,下面的表给出了两个字符串的索引。
索引 | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
字符串 | P | y | t | h | o | n |
负数索引 | -6 | -5 | -4 | -3 | -2 | -1 |
索引 | 0 | 1 | 2 | 3 |
---|---|---|---|---|
字符串 | J | a | v | a |
负数索引 | -4 | -3 | -2 | -1 |
现在思考以下问题:
- 取出Python中的P字符
- 取出Java中的最后一个字符
- 取出Python中的第2个到第5个字符(结合字符串切片)
其实,理解了表1、表2中字符串的索引,上面三个问题就很简单了。需要注意的是,索引编号是从0开始;负数索引是从容器尾部开始从右往左为各元素编号,起始编号为-1。代码如下:
print(word1[0]) #取出Python中的P字符
print(word2[-1]) #取出Java中的最后一个字符
print(word1[1:5]) #取出Python中的第2个到第5个字符(结合字符串切片)
负数索引中也可以使用切片,但是无法得到字符串的最后一个字母。如:
print(word1[1:-1]) #在切片中使用负数索引无法得到字符串的最后一个字母,此语句表示取出从第二个到倒数第二个字符,输出结果为:ytho
2.2 增量切片
现在,再思考一个问题,如何取word1中排在奇数位置上的字符 ?这里面,有一个叫做增量切片的概念,以增量的方式获取元素,不过需要再多使用一个冒号。代码如下所示:
print(word1[::2]) #取Python中排列在奇数位置的字符,输出结果为:Pto
3. 字符串方法
3.1 Python中的常用、简单方法
方法名称 | 含义 |
---|---|
capitalize | 将首字母转换为大写 |
count | 计算指定字符或者字符串出现的次数 |
isalpha | 判断字符串中所有的字符是否均为字母,如是,则返回True |
isdecimal | 判断字符串中的所有字符是否均为十进制数,如是,则返回True |
isalnum | 判断字符串中的所有字符是否为字母或者数字,如是,则返回True |
lower | 将字符串中的所有字母均替换为小写 |
upper | 将字符串中的所有字母均替换为大写 |
strip | 删除字符串头尾指定的字符,默认为删除头尾的空格 |
split | 使用指定分隔符分割字符串,并返回一个由分割片段组成的列表 |
部分方法使用结果如下:
3.2 join方法
join方法带有一个参数,该参数是可迭代的容器(如列表),返回通过指定字符连接容器元素后生成的新字符串。
例如,现在为2020年12月20日,给定year=2020,month=12,day=20,让使用’-'将year-month-day连接起来。代码如下所示:
year='2020'
month='12'
day='20'
datetime='-'.join([year,month,day])
print(datetime) #输出结果为2020-12-20
这里千万要注意一个点,即year/month/day均需为字符串类型,应写’2020’而不是2020,对于不是字符串类型的应先转换为字符串类型。
3.3 splitlines方法
splitlines方法和split方法类似。通常用于处理跨行的字符串,返回的是一个列表,其中每个元素是该跨行字符串的一行。如:
multi_str="""name:zhanjianjun
sex:male
ID:28"""
print(multi_str)
multi_str_split=multi_str.splitlines()
print()
print(multi_str_split)
输出结果为:
name:zhanjianjun
sex:male
ID:28
[‘name:zhanjianjun’, ‘sex:male’, ‘ID:28’]
4. 格式化字符串
格式化字符串的好处是:可以为字符串指定一个通用模块,并向该模块插入变量,省去了重复性工作。
4.1 格式化字符串
要实现格式化字符串,需要编写一个带有特殊占位符的字符串,并在该字符串上调用format方法,往占位符中插入变量。例如,It’s a orange; It’s a apple; It’s a tomato; It’s a banana. 发现这些字符串中均有It’s a,那么是否可以将It’s a指定为一个模块,然后往里面输入orange/apple//tomato等?实现代码如下:
#格式化字符串
fruits=['orange','apple','tomato','banana']
S=[] #创建一个空列表,用于容纳生成的字符串
s='It\'s a {}.' #创建一个带有特殊占位符的模块
for i in range(len(fruits)):
S.append(s.format(fruits[i]))
print(S)
运行结果为:
[“It’s a orange.”, “It’s a apple.”, “It’s a tomato.”, “It’s a banana.”]
4.2 Python3.6以后版本的格式化字符串
f-strings是Python的新特性,与前面格式化字符串明显区别是:字符串须以f开头,这也就是用特殊方式告诉Python此处有格式化字符串;然后,直接在特殊占位符中使用变量就可以了。为了实现上面同样的问题,此处代码如下所示:
#Python3.6版本后的格式化字符串
fruits=['orange','apple','tomato','banana']
S=[] #创建一个空列表,用于容纳生成的字符串
for i in range(len(fruits)):
S.append(f'It\'s a {fruits[i]}.')
print(S)
运行结果为:
[“It’s a orange.”, “It’s a apple.”, “It’s a tomato.”, “It’s a banana.”]
对比4.1和4.2的结果,单从结果来看,完全一致。因此,可以根据特定环境的需要,选择合适的格式化字符串方法。
以上内容主要是归纳、总结、分析了Python中字符串和文本数据的一些属性、方法,属于基本知识,难度较小;其中格式化字符串部分可以着重学习,用途广泛。笔者水平有限,难免出现纰漏,欢迎各位看官前来交流与讨论,大家一起学习、一起进步。
5. 完整代码
#coding:utf-8
word1,word2 = 'Python','Java' #创建两个字符串
#打印上面创建的两个字符串
print(word1)
print(word2)
print(word1[0]) #取出Python中的P字符
print(word2[-1]) #取出Java中的最后一个字符
print(word1[1:5]) #取出Python中的第2个到第5个字符(结合字符串切片)
print(word1[1:-1]) #在切片中使用负数索引无法得到字符串的最后一个字母,此语句表示取出从第二个到倒数第二个字符
print(word1[::2]) #取Python中排列在奇数位置的字符,输出结果为:Pto
year='2020'
month='12'
day='20'
datetime='-'.join([year,month,day])
print(datetime) #输出结果为2020-12-20
multi_str="""name:zhanjianjun
sex:male
ID:28"""
print(multi_str)
multi_str_split=multi_str.splitlines()
print()
print(multi_str_split)
print()
#格式化字符串
fruits=['orange','apple','tomato','banana']
S=[] #创建一个空列表,用于容纳生成的字符串
s='It\'s a {}.' #创建一个带有特殊占位符的模块
for i in range(len(fruits)):
S.append(s.format(fruits[i]))
print(S)
print()
#Python3.6版本后的格式化字符串
fruits=['orange','apple','tomato','banana']
S=[] #创建一个空列表,用于容纳生成的字符串
for i in range(len(fruits)):
S.append(f'It\'s a {fruits[i]}.')
print(S)