不怎么正经部分
又有好久不总结知识点了,大三不仅专业课程变多了,其他事情也多了。最近各种熬夜、码码。。。唉,说好的大学生活好呢?
好了,不扯淡了,最近研究了一下 Python,今天来看一下 Python 中的字符串相关操作。
正经部分
字符串作为 Python 支持的基本数据类型之一,可以说它是最基础也是最重要的数据类型之一了。
Python 中字符串的功能十分强大。先从创建讲起吧:
Python 中字符串可以有多种方式表示(单引号、双引号、三引号),下面是常用的表示方法:
s1 = 'abc'
s2 = "I'm a student, thanks"
s3='''This is a long text
example in python.'''
path = r'C:\Users\Administrator\Desktop'
上面代码中列举了 4 中 Python 中字符串的表示方法:
第一个:s1 = 'abc'
这个是最常用的表示方法了。没有什么特殊。
第二个:s2 = "I'm a student, thanks"
用这个表示方法主要是用于当字符串中本身存在英文的单引号的情况,可以直接写,而不需要将字符进行额外的转义处理。不理解?那来看张图吧:
首先我是直接用单引号来包裹一个字符串,但是这个字符串本身就存在单引号,而且我并没有进行转义处理,于是 Python 报语法错误,接下来呢我将字符串中的单引号用反斜杠进行转义处理了(类似于C语言里面的 ‘\n’)。语法正确。最后我外层用双引号包裹,然后字符串本身存在的单引号我不用转义处理 Python 也可以识别了。这就是外层双引号的作用。
接下来是第三个,我用三个单引号包裹一个字符串,请注意这个字符串是多行的。用三个单引号包裹字符串的情况特别适用于处理长文本(需要换行的文本),它会保留字符串中的换行符。如图:
最后是第四个,创建字符串的时候我在前面加了一小写字母:‘r’,什么作用呢?其实这个告诉 Python 将这个字符串以原内容形式保存,即不进行特殊字符的转义处理。我们知道反斜杠 ‘\’ 遇到一些字符是会进行转义处理的(比如:\n 转义成换行)。但是某些时候我们不希望字符串中的反斜杠 ‘\’进行转义,比如我们在 windows 操作系统中输入文件路径的时候,这个时候就可以采用这个格式来使得字符串以原内容保存。
我们还可以通过字符串和另外一个变量进行相关运算来得到一个新的字符串:
>>> 'a'*4 # 字符串*正整数 可以得到由这个字符串重复n次的新字符串
'aaaa'
>>> 'a'+'b' #字符串和字符串之间用 + 运算符来连接两个字符串
'ab'
好了。创建好了字符串,我们就可以对其进行操作了,Python 字符串提供了非常丰富的 API,下图是部分 Python 字符串的 API :
值的注意的是图片里面的 s.replae 方法,这个方法不会改变 s 本身,它将替换的结果作为一个字符串返回,所以如果你想将 s 本身的字符串进行替换,你可以调用 s = s.replace(...)
其他方法还是比较好理解的,这里我们看一下 s.format 方法和 s.join 方法:
s.format() 方法算是一个比较灵活的方法了。其作用是对字符串进行格式化操作。什么样的格式化呢?先看个例子:
s = 'my name is {0:-<5s}, my age is {1:-<3d}'.format('指点', 20)
首先,我们可以发现,字符串中有两个地方用了:{a:bcde}
这种形式的表示方法。其实这个就相当于C语言里面的 ‘%’ 占位符,只不过比C语言里面的占位符更加灵活。
首先是参数a,参数 a 是一个整形值,其代表了这里的内容对应的 format 方法中参数的位置,format 方法中的参数是一个可变参数,其实就是一个元组。也就是说取format方法的参数中第 a 个(从0开始)位置的参数作为此处字符串的内容。
接下来是参数 b,其意为为当取到的内容宽度不足 d 位时,用参数 b 来进行填充多余的宽度,如果参数 b 为空,即没有参数 b,那么默认用空格填充,如果内容宽度不小于 d 位,那么不填充。
参数 c 代表内容的对齐方式。‘<’ 代表左对齐,‘>’代表右对齐,‘^’ 代表居中对齐,如果没有参数 c ,那么默认右对齐。
参数 d 和参数 e 分别代表内容占用的宽度和内容的数据类型,对于参数e,‘s’ 代表字符串类型。’d’ 代表整数类型 ,’f’ 代表浮点数类型……
ok,类比我们上面的例子,在第一个 ‘{0:-<5s}’中,我取了 format 方法中的第一个参数(下标为0)作为内容(即为‘指点’)。对齐方式为左对齐,内容占用的宽度是 5 位,如果内容宽度小于 5 位,用‘-’符号填充。数据类型为字符串类型。对于第二个 ‘{1:-<3d}’,道理是一样的。
值得一提的是:如果字符串中 ‘{a:bcde}’ 的顺序和 format 方法的参数顺序一致,那么上面的 ‘{a:bcde}’ 中的参数 a 可以省略,那上面的例子来说,我们也可以写成:
s = 'my name is {:-<5s}, my age is {:-<3d}'.format('指点', 20)
结果是一样的。
对于内容的数据类型的种类,除了例子中的字符串以外,这里给出一些其他的类型和对应的符号:
欲知更多类型,敬请百度。
特别的,对于浮点数,我们还可以使用 m.nf
来指定其精度,其中 m 为整个数字的宽度(包括小数点),n 为小数部分的精度,如果取到的浮点数小数部分大于 n ,那么进行四舍五入。
例:
这里是采用居中对齐,整个内容要求最短为 10 位宽,小数部分占 3 位,小数点一位,整数部分 1 位,刚好 5 位,不足10位,所以用空格填充(没有指定填充符号,默认为空格填充)。
其实对于字符串的格式化,也可以用类似于C语言 printf 函数中的占位符 ‘%’来完成,不过没有format 方法灵活,逐渐被 format 方法取代了。这里看几个例子:
'my name is %10s, my age is %3d' % ('指点', 20)
'Pi = %5.3f' % (3.1415)
'2^10 = %e' % (2**10)
类比C语言中的占位符‘%’,其实用法一样,只是格式不同。
好了,字符串的格式化就先介绍到这里了。下面看一下字符串中的 join 方法:
s.join(iterable)
意为将可迭代序列 iterable 中的字符串元素以 s 作为分隔符连接成一个新的字符串。请注意 iterable 序列中的元素一定要为字符串类型。什么?说的太抽象了,那来举个例子:
在第2步中,我在元组参数中添加了一个整型值 2,Python 报错,意为:序列中项目一,需要的是 str 实例,然而发现的是 int 类型。
好了,关于 Python 的字符串操作就先到这里了。小伙伴们可以练习一下 Python 中的字符串相关 API,以加深理解。
如果觉得本文对您有帮助,请不要吝啬您的赞,如果有任何问题,欢迎留言指点。
谢谢观看。