Python基础-字符串

Posted 不该相遇在秋天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础-字符串相关的知识,希望对你有一定的参考价值。

 

字符串格式化

字符串格式化其实就是字符串的拼接,自定义将某些字符串植入到主字符串之中,这里介绍几种常用的方式。

百分号占位

tmp = \'你好 我是%s,我今天挣了%.2f元钱\'
value = (\'小明\',5.32567)
str = tmp % value
print(str)

打印结果:
你好 我是小明,我今天挣了5.33元钱

 

百分号是占位符,后面紧跟着元素类型,s就是string的意思,f就是float的意思,一般也只用得到这两种。

格式化符号有一张表的,大概就是下面这样

 

模板字符串

from string import Template
tmp1 = Template(\'你好 我是$name,我今天挣了$num元钱\')
str = tmp1.substitute(name="小红",num="6")
print(str)

打印结果:
你好 我是小红,我今天挣了6元钱

 

format格式化

以前的老python必然有它遗留下来的写法,但是目前大部分格式化字符串的写法还是以format方式为主流。 

str = "{},{}还有{}".format("小明","小红","小强")
print(str)

打印结果:
小明,小红还有小强

 

我们还可以在占位符中标记值的编号,编号从0开始。

str = "{2},{1}还有{4},你们三个里面只有{1}的学习最好".format("小明","小红","小强","小芳","小黑")
print(str)

打印结果:
小强,小红还有小黑,你们三个里面只有小红学习最好

 

我们仍然可以使用变量命名的方式:

str = "今天是{name}的{age}岁生日".format(name="小明",age=18)
print(str)

打印结果:
今天是小明的18岁生日

 

如果你有兴趣细扣的话,会发现format的用法有很多,各种稀奇古怪的替换方式和格式处理只有你想不到的,但是用到的时候都是小概率,所以就不过多描述了。

 

f字符串

f字符串是python3.6新加入的一种格式化字符串的方式,对于新写的代码推荐使用这种方式来解决格式化的需求。

name = "小明"
age = 18
str = f"今天是{name}的{age}岁生日"
print(str)

打印结果:
今天是小明的18岁生日

 

可以看出,它其实就是变量植入,这种方式更易阅读。

 

常用方法

字符串居中 center()

这个方法通过在两边添加填充字符使得让字符串居中,默认填充的是空格

name = "我是小明"
print(name)
print(name.center(10))

打印结果:
我是小明
   我是小明   

 

上面的代码让字符串填充到10个字符,除去字符串本身占据4个字符,那么还需要填充6个,也就是左右各3个字符。

 

我们可以指定填充的字符:

name = "我是小明"
print(name)
print(name.center(10,\'*\'))

打印结果:
我是小明
***我是小明***

 

查找字符串 find()

如果你想在一个字符串中查找子字符串,可以使用find方法,如果找到,会返回子串所在的索引,如果没找到,返回-1

name = "我是小明"
print(name.find(\'小明\'))

打印结果:
2

 

你还可以指定查找范围,find方法另有两个选填参数,可以传递查找的开始索引与结束索引。

name = "我是小明"
print(name.find(\'小明\',0,3))

打印结果:
-1

需要注意的是,结束索引是不包含的,也就是说,我刚刚指定查找的是第0、第1、第2个索引,也就是“我是小”三个字,所以它返回-1

 

大小写转换 upper、lower、title

转大写:

words = "abc"
print(words.upper())

打印结果:
ABC

 

转小写:

words = "ABC"
print(words.lower())

打印结果:
abc

 

以单词为界限 首字母大写其他小写:

words = "my name is bob"
print(words.title())

打印结果:
My Name Is Bob

 

打散字符串 split()

字符串打散后会返回列表格式,不指定切割的字符的话,默认会在空白字符比如空格、tab符、换行符等地方进行切割。

words = "my name is bob"
print(words.split())

打印结果:
[\'my\', \'name\', \'is\', \'bob\']

 

一般我们都会指定切割符:

words = "/usr/bin/env"
print(words.split(\'/\'))

打印结果:
[\'\', \'usr\', \'bin\', \'env\']

 

序列合并字符串 join()

这个方法与split方法的作用完全相反,split把字符串打散成序列,join可以把打散后的序列重新合并成原字符串。

words = [\'\', \'usr\', \'bin\', \'env\']
print(\'/\'.join(words))

打印结果:
/usr/bin/env

 

去除左右空白 strip()

strip方法可以删除字符串左右两边的空白字符,但是不包含中间的空白。

words = "    my name is bob   "
print(words.strip())

打印结果:
my name is bob

 

你也可以传入参数显式指定要删除的字符:

words = "********my name is bob***"
print(words.strip(\'*\'))

打印结果:
my name is bob

 

如果你不想删除两边的,只想删除某一边的,可以使用lstrip()和rsplip()方法分别删除左边的字符和右边的字符。

 

字符串替换 replace()

words = "my name is bob, my name is bob"
print(words.replace(\'bob\',\'小明\'))

打印结果:
my name is 小明, my name is 小明

 

三引号

会js的应该都知道js中有一个反引号的写法,可以在其中随意写入多行文本,在python中可以用三个引号来做定界符。

words = \'\'\'
<li class="dh1">
          <ul class="dh2">
                <li><a href="xs2.html" target="mainFrame">宇宙</a></li>
                <li><a href="xs2.html" target="mainFrame">哲学</a></li>
                <li><a href="xs2.html" target="mainFrame">电子商务</a></li>
                <li> <a href="xs3.html" target="mainFrame">互联网</a></li>
          </ul>
</li>
\'\'\'
print(words)

打印结果:
<li class="dh1">
          <ul class="dh2">
                <li><a href="xs2.html" target="mainFrame">宇宙</a></li>
                <li><a href="xs2.html" target="mainFrame">哲学</a></li>
                <li><a href="xs2.html" target="mainFrame">电子商务</a></li>
                <li> <a href="xs3.html" target="mainFrame">互联网</a></li>
          </ul>
</li>

 

那如果我要在中间嵌入变量呢?

name = (\'大学\',\'中学\',\'小学\',\'幼儿园\')
words = \'\'\'
<li class="dh1">
          <ul class="dh2">
                <li><a href="xs2.html" target="mainFrame">%s</a></li>
                <li><a href="xs2.html" target="mainFrame">%s</a></li>
                <li><a href="xs2.html" target="mainFrame">%s</a></li>
                <li> <a href="xs3.html" target="mainFrame">%s</a></li>
          </ul>
</li>
\'\'\'
print(words % name)

打印结果:
<li class="dh1">
          <ul class="dh2">
                <li><a href="xs2.html" target="mainFrame">大学</a></li>
                <li><a href="xs2.html" target="mainFrame">中学</a></li>
                <li><a href="xs2.html" target="mainFrame">小学</a></li>
                <li> <a href="xs3.html" target="mainFrame">幼儿园</a></li>
          </ul>
</li>

 

判断是否满足特定条件

纯字母组成 isalpha()

words = \'abc\'
print(words.isalpha())

打印结果:
True

 

纯数字组成 isdigit()

words = \'123456\'
print(words.isdigit())

打印结果:
True

 

字母数字组成 isalnum()

检测字符串是否全部由字母和数字组成

words = \'abcd333\'
print(words.isalnum())

打印结果:
True

 

纯字母或纯数字或字母数字这三种都为true,除此之外都是false,哪怕有一个空格也是false。

words = \'abcd3 33\'
print(words.isalnum())

打印结果:
False

 

全大写字母 isupper()

这方法只是针对字符串里面的字母进行判断,如果字符串里面的字母是全部大写,即为true。

words = \' ABCDEF123456\'
print(words.isupper())

打印结果:
True

 

全小写字母 islower()

words = \' abc123456\'
print(words.islower())

打印结果:
True

 

结语

还有很多零零散散小概率使用的东西,也不知道怎么编排进来,也就算了。

 

所有序列的标准操作,包括索引、加法、乘法、切片、查找、长度、最大最小值都可以用在字符串上。

 

但是字符串是不可变的,所以所有的元素赋值和切片赋值都是不可用的。

 

另外一点,就是如果字符串要加一个数字,那么你会发现程序会报错,这种情况需要做类型转换,可以使用str()方法将数字转为字符串。

 

以上是关于Python基础-字符串的主要内容,如果未能解决你的问题,请参考以下文章

[Python]常用代码块

201555332盛照宗—网络对抗实验1—逆向与bof基础

python基础学习(十三)

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

逆向及Bof基础实践

python基础学习笔记(十三)