Python中字符串和文本数据的分析

1. 学习目标

  • 掌握取子字符串的方法
  • 掌握字符串方法

2. 字符串

首先,创建两个字符串,如下所示:

#coding:utf-8

word1,word2 = 'Python','Java'   #创建两个字符串
#打印上面创建的两个字符串
print(word1)
print(word2)

2.1 取子字符串和字符串切片

字符串其实可以看做一个“水杯”,只不过里面装的不是水,而是字符。为了说明,上面创建的两个字符串的内部关系,下面的表给出了两个字符串的索引。

表1 字符串Python的索引
索引012345
字符串Python
负数索引-6-5-4-3-2-1
表2 字符串Java的索引
索引0123
字符串Java
负数索引-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中的常用、简单方法

表3 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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值