第五章:python操作字符串
这几天一直在思考以什么顺序来呈现python,想把相关的知识一次写完,可又不想文章太长而变的复杂,让人不耐烦,不想往下读(首先排除懒得写太长).索性就拆开来说吧,主线穿插支线,以实用,经常用的点为主.
今天来道python家常菜:字符串的操作
字符串之前已经提过了,一个个字符连起来的串就是字符串,在编程界的特征就是被引号引起来的,都可以看做是一个字符串(因为字符串在表现形式上可以跟其他数据看起来一样,但代表的含义不同,引号作为特征).
报菜完毕,开始上菜
餐前须知(仅限于新人):
对字符串的操作,python封装了很多方法(函数)来供使用,当前会用就行,以后会去细说什么是函数.
- 获取字符串的长度
使用函数 len() 括号内直接写上字符串,或者指向字符串的变量名,即可获得字符串的长度.
如果是在编辑模式,需要用print()来进行打印输出,仅有len()函数不会有输出,也可以将len()函数的返回值赋值给一个变量,再用print()函数打印输出变量,有返回值的函数都可以这样做.
- 字符串的拼接
直接用 + 号将两个字符串连接起来.
- 字符串的复制
用 + 号可以实现字符串的拼接,如果需要字符串重复多次呢? 用 + 号岂不是很麻烦.
这时, * 号来了.
- 获取字符串的某个字符
这就要提到"索引"了,字符串是若干个字符连接起来组成的串,它们在字符串中是有顺序的,从左往右依次是0,1,2,3… 注意是从0开始的,这个编号就是它们在字符串中对应的"索引".
以字符串"python"为例:
知道是怎么排序的了,要怎么获取呢?
这就要用到 [ ] 中括号了,在字符串后面加上一对**[ ]**,然后里面写上对应的索引即可获得对应的字符.
要注意的是这个索引不能超过这个字符串的长度减去1,因为是从0开始的,所有要减去1,如果不慎发生了就会出错.
为了可以快速取到字符串靠后的字符,python还提供字符的反向排序,从右往左依次是 -1,-2,-3…
以字符串"hello python"为例,中间有个空格.
反着来同样要注意索引越界问题.
- 字符串的截取
要获取字符串的一段字符组成的字符串可以使用字符串的截取,此方法同样是在 [ ] 里边操作,只不过不单是一个索引了,而是一对索引,中间用 : 冒号隔开,标志着开始和结束,但是开始索引对应的字符会被截取,结束索引对应的字符不会被截取,就是数学中的左闭右开区间 [ ).
这里同样要注意索引越界问题.
字符串截取的起始和结束索引可以省略;
如果省略起始索引代表从字符串的最开头开始截取到结束索引(不包含结束索引对应的字符);
如果省略结束索引代表从开始索引一直截取到字符串的最后一个字符(包含最后一个字符);
如果起始索引和结束索引都不写代表截取整个字符串(等同于复制了整个字符串).
用逆向索引也是一样的.
因为字符串截取默认是从左往右截取的,所以用逆向索引截取时,值小的索引应该作为起始索引.
既然默认是从左往右,那就是可以更改截取方向咯!
在起始索引和结束索引后边写上 “步长” ,中间用 : 冒号隔开.
字符串截取操作的完整表达式:
字符串[start:end:step]
step的值为正负数均可,其绝对值大小决定了截取数据时的"步长”,而正负号决定了“截取方向”.
正表示“从左往右”取值,负表示“从右往左”取值.当step省略的时候,那么step默认等于1(从左往右依次截取)
注意:截取方向非常重要!在设置起点和终点时务必要参考step确定的方向
如果step是正值,截取方向是从start开始,从左向右截取到end(不包含该索引对应值),end对应的位置一般在start的右边.
如果step是负值,截取方向是从start开始,从右向左截取到end(不包含该索引对应值),end对应的位置一般在start的左边.
step代表方向的同时还代表步长,表示每隔几个字符截取一个字符.
字符串截取是很常用的,熟练操作是很必要的,需要注意的就是截取方向与索引越界.
- 字符串查找
字符串查找是指查找某一个字符串是否包含在另一个字符串中 ,比如它可以用来判断一句话里是否包含敏感词语.
用in或者not in这两种方法均可实现.in用来判断一个字符串是否在包含在另一个字符串中,而not in用来判断一个字符串是否不包含着另一个字符串中.
find() 函数用于查找某一字符是否存在于另个字符串中时,如果存在则返回该字符串在另一个字符串中第一次出现时第一个字符的所在位置,如果不存在则返回 -1.
完整表达式:
字符串.find() 括号内是要找的字符
- 字符串替换
replace() 函数
完整表达式:
字符串.replace() 括号内是要替换的字符和替换成什么字符,中间用逗号隔开
- 字符串的分隔
字符串的分隔是先将一个字符用某个分隔符号分开,然后将分隔后的值以列表的形式返回,至于列表是什么以后会说.
分隔字符串需要用到 split() 方法.
完整表达式:
字符串.split() 括号内是要以什么字符分割
如果指定的分割符在左右边界会额外分出空字符串.
- 字符串格式化
字符串格式化是将一个字符串作为模板,运行时替换这个模板中特定标记处的字符串,从而产生新的字符串.这里主要说的是Python3.6以后新推出的字符串格式化方法.先编写一个模板,要替换的部分使用一对大括号{ }占位.
字符串.format() 括号中的值会替代字符串中的{ }
可以设置多个需要替换的位置.
默认是从左往右依次填空,还以指定位置.
还可以指定标志.
对于非字符串的值:
前面的0和1分别对应format后面的两个数,冒号后面的 .2f 和 .3f分别指保留几位小数点.
.2表示保留两位小数.百分号表示以百分比的形式显示.
表示不包含小数部分.
字符串格式速查表:
数字 | 格式 | 输出 | 描述 |
---|---|---|---|
3.1415926 | ‘{:.2f}’ | ‘3.14’ | 保留小数点后两位 |
3.1415926 | ‘{:+.2f}’ | ‘+3.14’ | 带符号保留小数点后两位,在正数前面显示加号 |
-1 | ‘{:+.2f}’ | ‘-1’ | 带符号保留小数点后两位 |
2.71828 | ‘{:.0f}’ | ‘3’ | 不带小数 |
5 | ‘{:0>2d}’ | ‘05’ | 数字补零(填充左边, 宽度为2) |
5 | ‘{:x<4d}’ | ‘5xxx’ | 数字补x (填充右边, 宽度为4) |
10 | ‘{:x<4d}’ | ‘10xx’ | 数字补x (填充右边, 宽度为4) |
1000000 | ‘{:,}’ | ‘1,000,000’ | 以逗号分隔的数字格式 |
0.25 | ‘{:.2%}’ | ‘25.00%’ | 百分比格式 |
1000000000 | ‘{:.2e}’ | ‘1.00e+09’ | 指数记法 |
13 | ‘{:10d}’ | ’ 13’ | 右对齐(默认, 宽度为10) |
13 | ‘{:<10d}’ | '13 ’ | 左对齐(宽度为10) |
13 | ‘{:^10d}’ | ’ 13 ’ | 中间对齐(宽度为10) |
- 转义字符
转义字符是以斜杠 ”\” 开头,后面跟着一定格式的字符来表示特定含义的特殊字符.主要有以下转义字符:
转义字符 | 说明 |
---|---|
\n | 换行符,将光标位置移到下一行开头 |
\r | 回车符,将光标位置移到本行开头 |
\t | 水平制表符,也即 Tab 键 |
\a | 蜂鸣器响铃.注意不是喇叭发声,现在的计算机很多都不带蜂鸣器了,所以响铃不一定有效 |
\b | 退格(Backspace),将光标位置移到前一列。 |
\\ | 反斜线 |
\’ | 单引号 |
\” | 双引号 |
\ | 在字符串行尾的续行符,即一行未完,转到下一行继续写。 |
例如:
\n用来换行.
\’用来显示单引号,如果字符串外面用的是单引号,那么里面要用\’来指代单引号.
如何让上面这段字符串的转义字符失效呢?可以在字符串前面加 r.
- 数字和字母之间的转换
为什么能这样转,牵扯到编码,这里不多说了(可以自己查阅相关资料).
字符转数字 :ord(字符)
数字转字符 :chr(数字)
根据ascii码表的对应关系进行转换,这里就不放ascii码表了,网上一搜一大堆.
汉字(汉字对应的编码表)也可以,但是根据相应编码表进行转换.(gbk,utf-8)
.
上面只是举例了部分字符串操作方法,下面是速查表:
方法 | 说明 |
---|---|
len(字符串) | 获得字符串的长度 |
字符串.startwith(字符串) | 返回是否以指定字符串开头 |
字符串.endwith(字符串) | 返回是否以指定字符串结尾 |
字符串.find(字符串) | 返回第一次出现指定字符串的位置,找不到返回-1 |
字符串.rfind(字符串) | 返回最后一次出现指定字符串的位置 |
字符串.count(字符串) | 返回指定字符串出现的次数 |
字符串.isalnum() | 字符串中是否只包含字母或数字 |
字符串.strip() | 去除字符串首尾指定信息 |
字符串.lstrip() | 去除字符串左边指定信息 |
字符串.rstrip() | 去除字符串右边指定信息 |
字符串.capitalize() | 产生新的字符串,首字母大写 |
字符串.title() | 产生新的字符串,每个单词都首字母大写 |
字符串.upper() | 产生新的字符串,所有字符全转成大写 |
字符串.lower() | 产生新的字符串,所有字符全转成小写 |
字符串.swapcase() | 产生新的,所有字母大小写转换 |
字符串.isalpha() | 检测字符串是否只由字母组成(含汉字)。 |
字符串.isdigit() | 检测字符串是否只由数字组成。 |
字符串.isspace() | 检测是否为空白符 |
字符串.isupper() | 是否为大写字母 |
字符串.islower() | 是否为小写字母 |
呼~,可以去睡觉了.
如有错误还望指出
允许转载但请注明出处