Python学习之旅—Day05

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习之旅—Day05相关的知识,希望对你有一定的参考价值。

前言:

        前面4篇博客主要对Python的基础知识进行了疑难问题和重要知识点的梳理,本次博客主要聚焦于Python中字符串重点方法的梳理,特别简单的方法例如strip()方法,lower()方法等不在本文的整理内容当中。


1.split()方法

   通常我们使用split方法,往往指定分隔符来获取我们想要的数据。这里主要强调,split可以接收第二个整形参数,我们来看下面的例子。

s = "1+2+3++4+5+cisxsd+123d+++12+12"
j = s.split(+, 3)
print(j)
#打印的输出结果为:[‘1‘, ‘2‘, ‘3‘, ‘+4+5+cisxsd+123d+++12+12‘]
#再例如我们可以使用换行符来进行相应的分割,如下:
content = "middle\\napi\\nDisk"
v = content.split(\\n)
print(v)

我们来分析下结果:第一个参数指定分隔符,第二个参数指定划分到第几个分隔符,我们来看看下面每一个分隔符的具体划分过程:

第一次:+
1,2+3++4+5+cisxsd+123d+++12+12
第二次:+
1,2,3++4+5+cisxsd+123d+++12+12
第三次:+
1,2,3,+4+5+cisxsd+123d+++12+12

另外如果知道划分后列表中的元素有几个,我们可以直接赋予变量去取值,如下的代码:

s = "1+2+3+++4+5"
a, b, c, d = s.split(+, 3)
print("a="+a,"b="+b,"c="+c,"d="+d)
#输出值为:a=1 b=2 c=3 d=++4+5

不过大家要记住的是,一定要确定知道分割后列表中的元素有几个,要不然,变量太少,会导致如下的错误:ValueError: too many values to unpack。

这里对于Split方法,需要补充一个知识点,就是关于rsplit()方法,该方法的主要作用是从最右边的分隔符开始,可以指定从右边开始,然后划分到第几个分隔符。我们具体来看下代码:

 

content = "[email protected]"
li = content.rsplit(+, 1)
print(li)
#打印结果:[‘5+9+2++12‘, ‘@cisco123‘]
content = "[email protected]"
li = content.rsplit(‘+‘, 3)
print(li)
#打印结果:[‘5+9+2‘, ‘‘, ‘12‘, ‘@cisco123‘]

 

2.casefold()方法

casefold()方法和lower()方法类似,都是将大写字母变为小写。不过不同之处在于lower函数只能完成ASCII码中A-Z之间的大写到小写的转换,当遇到其他外语语种时,大写向小写转换lower函数就无能为力。而casefold()方法更具有攻击性,例如德国的小写字母‘口‘相当于‘ss‘ ,因为他已经小写了,所有lower不会做什么,但是Casefold会将它变为‘ss‘ 。因此我们可以总结下:casefold方法的作用范围更大,包含英语和小语种,而lower()方法之针对英文字符。

3.center()方法和ljust(),rjust()以及zfill()方法

我们来看如下的示例代码:

name = ‘scspark‘
val = name.center(20,‘*‘)
print(len(name))
print(val)
val = name.ljust(20,‘*‘)
print(len(name))
print(val)
val = name.rjust(20,‘*‘)
print(len(name))
print(val)
打印结果为:

7
******scspark*******
7
scspark*************
7
*************scspark

由此我们可以来总结下三个方法的具体作用,它们主要用于字符串的对齐工作,具体而言如下:

字符串在输出时的对齐:
S.ljust(width,[fillchar]) 
#输出width个字符,S左对齐,不足部分用fillchar填充,默认的为空格。 同样来看下面的例子:

 

val = name.ljust(20,‘*‘)
print(len(name))
print(val)
这里表示输出20个字符,字符串左对齐,由于字符串长度为7,所以需要使用*来补齐,因此最终的输出为:scspark************* 同时使用了13个*来补齐整个字符串。

===========================================================================

S.rjust(width,[fillchar]) #右对齐 

#输出width个字符,S右对齐,不足部分用fillchar填充,默认的为空格。来看看上面的例子:

val = name.rjust(20,‘*‘)
print(len(name))
print(val)
同样这里表示输出20个字符,name字符串右对齐,使用了13个*补齐。因此最终的输出为:*************scspark

S.center(width, [fillchar]) #中间对齐 

比如:

name = ‘scspark‘
val = name.center(20,‘*‘)

表示输出20个字符,name字符串中间对齐,由于字符串长度为7,所以需要使用*来补齐,因此最终的输出为:******scspark*******   左边6个*,右边7个*


S.zfill(width) 表示返回指定长度的字符串s,默认是右对齐,如果字符串的长度不够,默认使用0来填充。举例如下:

 

s = "hello,spark!"
print(s.zfill(20))
#打印如下:00000000hello,spark!

 

4.count()方法,count()方法主要用于判断字符串中的子串或者字符在整个字符串中出现的次数,而且还可以指定开始和结束索引。来看下面具体的例子:

s = "abcsparkabcsparkabc"
print(s.count("abc"))
#打印如下:3

上面的Python语句表示计算子串"abc"在整个字符串s中出现的次数,这里出现了3次。如果我们指定索引从9开始呢?再来看看如下的代码:

s = "abcsparkabcsparkabc"
print(s.count("abc", 9))
#打印如下:1

这就表示从索引位置9开始,abc只出现了1次。

s = "abcsparkabcsparkabc"
print(s.count("a"))
#出现了5次

5.Python的name()方法和find方法,主要关注两者的区别。我们直接来看下面的例子:

name = abcsparkcisco

val = name.find("fff")
print(val)   #打印结果-1

val = name.index("fff")
print(val)  #报错:ValueError: substring not found

从上面可知,find方法和index()方法都可以用来寻找某个字符或者子串在字符串中第一次出现的位置,但是如果子串不存在,find()方法会返回-1,而index方法会报错。所以这里推荐使用find方法。

6.关于字符串中的format方法

我们之前使用过%来对字符串进行格式化,但是相比于%来说,format方法更加通用和容易理解。我们一起来看看format的四种形式:

第一种形式,类似于format后面跟着一个元组:

name = "我叫{0},年龄{1},我诞生于{2},我会在大数据领域大放光彩,所以它们叫我{0}"
val = name.format(spark, 6, "伯克利分校")
print(val)
#打印出:我叫spark,年龄6,我诞生于伯克利分校,我会在大数据领域大放光彩,所以它们叫我spark

根据第一种形式,我们只需要使用{索引值}即可将字符串格式化,不过要注意区别索引值与元组中的值要一一对应。可以写成一句话:

"我叫{0},年龄{1},我诞生于{2},我会在大数据领域大放光彩,所以它们叫我{0}".format(‘spark‘, 6, "伯克利分校")

第二种形式类似于format参数指定接收一个*和列表,如下:

name = "我叫{0},年龄{1},我诞生于{2},我会在大数据领域大放光彩,所以它们叫我{0}"
val = name.format(*[spark, 6, "伯克利分校"])
print(val)
#打印出:我叫spark,年龄6,我诞生于伯克利分校,我会在大数据领域大放光彩,所以它们叫我spark

第三种形式:动态接收用户的输入参数,然后使用{变量名}来格式化字符串,可以来看看:

v = input(>>>)
name = "我叫{name},年龄{age},我诞生于{location},我会在大数据领域大放光彩,所以它们叫我{name}"
val = name.format(name=v, age=18, location="加州大学伯克利分校")
print(val)
#我叫spark,年龄18,我诞生于加州大学伯克利分校,我会在大数据领域大放光彩,所以它们叫我spark

第四种形式就是往format参数里面传入一个字典来格式化字符串,代码如下:

name = "我叫{name},年龄{age}"
dic = {name:spark, age:2}
val = name.format(**dic)
print(val)
#这点大家要注意format里面要传入**

还有第五种形式,不过这种形式用的比较少,建议大家掌握前面四种形式即可。代码如下:

name = "我叫{name},年龄{age}"
val = name.format_map({name:海角,age:18})
print(val)

7.isalnum()方法和isalpha()方法

# name = ‘alex中文1‘ #
# v = name.isalnum() # 字母,数字,字母+数字
# print(v)
# v = name.isalpha() # 字母
# print(v)

 isalnum() 方法主要用来检测字符串是否由字母和数字组成(即要么是字母,要么是数字,要么是字母+数字的组合,不过要注意的是这里面如果含有中文好像也是可以执行成功的),那么它的返回值表示:如果 string 中至少有一个字符并且所有字符都是字母或数字,或者是字母+数字的组合。返回 True,否则返回 False。但是如果有中文好像也执行成功:

str = "this2009中文";  # 字符中没有空格
print(str.isalnum())
#返回True

isalpha() 方法主要用于检测字符串是否只由字母组成。如果有其他的非字母字符,那么就返回False.来看下面的代码:

name = "sparkcisco123"
v = name.isalpha()
print(v)    # False

name = "saprk"
v = name.isalpha()
print(v)    # True

name = "中文Spark"
v = name.isalpha()
print(v)    #True

我们发现当字符串中有中文时,这里也是显示成功的!这里笔者在后面将作详细介绍。

8.我们再来看Python中另一个方法:partition()方法。来看看具体的示例:

content = "5+9+2"
v = content.split("+")
print(v, type(v))

v = content.partition("+")
print(v, type(v))

v = content.rpartition("+")
print(v, type(v))

可以看到split()方法和partition()方法的区别:split方法分割后返回的是一个列表,而partition方法分割后返回的是一个元组。其中rpartition方法表示从最右边的分隔符+开始分割,然后再生成元组。输出结果分别如下:

[‘5‘, ‘9‘, ‘2‘] <class ‘list‘>
(‘5‘, ‘+‘, ‘9+2‘) <class ‘tuple‘>
(‘5+9‘, ‘+‘, ‘2‘) <class ‘tuple‘>

9. swapcase()方法:该方法的主要作用是将字符串中的小写英文字符转大写,然后大写英文字符转小学。

name = ‘中文sparkCISco
print(name.swapcase())
#打印结果:中文SPARKcisCO

10. maketrans()方法和translate()方法两者结合使用

maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。两个字符串的长度必须相同,为一一对应的关系。

table = str.maketrans("aeiou",‘12345‘)
msg = "asdefasdfjasdifw[kmnakjudfasdf"val = msg.translate(table)print(val)
#打印结果如下:
asdefasdfjasdifw[kmnakjudfasdf 1sd2f1sdfj1sd3fw[kmn1kj5df1sdf

11. istitle()方法:Python字符串istitle()方法检查字符串中所有可大小写的第一个字符是否为大写,所有其他可大小写的字符是否均为小写,如果是则返回True,否则返回False.我们来看看如下的代码:

content = "I Am A Sparker, And My Name Is [email protected]#\\n\\t......"
print(content.istitle())
#打印结果:True

12.关于字符串中的isDecimal(),isDigit()方法,isNumeric()方法

关于这三个方法的区别,大家可以简单了解下,网络上已经有很多文章讲解:http://www.cnblogs.com/jebeljebel/p/4006433.html。我们还是来让代码说话:

name = 二十
print(name.isdecimal()) # 123
print(name.isdigit())   # 123  ②
print(name.isnumeric()) # 123  ② 二十

# name为‘123‘时,三个方法打印都为True
# name为②时,isdecimal()方法打印为True,其他两个方法打印为False
# name为二十时,前两个方法打印False,第三个方法打印True

我们一般在工作需求当中,用的最多的是精确匹配字符串中的数字,从上面的运行结果分析可知isdecimal()方法能够精确匹配数字,所以优先推荐大家使用。

13. replace()方法

该方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。如果不指定,那么就是全部替换。我们主要来指定这里的第三个参数。

我们一起来看下面的代码即可:

s3 = aavvaaabbaaaDDaa
print(s3.replace(a, b, 2))
# 返回bbvvaaabbaaaDDaa

s = "this is string example....wow!!! this is really string"
print(s.replace("is", "was"))
print(s.replace("is", "was", 3))
"""
返回如下结果:
thwas was string example....wow!!! thwas was really string
thwas was string example....wow!!! thwas is really string
"""

 ====================================================================================================

 目前暂时就整理这些,后期将结合具体的题目来对相关知识点进行总结

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

---恢复内容结束---

---恢复内容结束---

---恢复内容结束---




















































以上是关于Python学习之旅—Day05的主要内容,如果未能解决你的问题,请参考以下文章

Python学习之旅—Day04

Python学习之旅—Day03

Python学习之旅—Day06(字符串+字典+列表重点方法)

Python学习之旅—Day07(生成器与迭代器)

Python之旅Day6 模块应用

Python之旅Day1