Python基础学习参考(五):字符串和编码

时间:2022-12-10 19:19:51

 一.字符串

前面已经介绍过字符串,通过单引号或者双引号表示的一种数据类型。下面就再来进一步的细说一下字符串。字符串是不可变的,当你定义好以后就不能改变它了,可以进一步的说,字符串是一种特殊的元组,元组没有讲到,后面会介绍,这里只是提一下概念,总之,字符串是不可变的。

1.特殊字符串

在字符串中有一些特殊字符,比如换行\n,制表符\t,回车\r,反斜杠\\等,对于这些特殊字符需要通过“\”反斜杠进行转义,在字符串还涉及一个原始字符串操作符”r”和“R”,这是什么意思呢?看下面代码:

a = r'abc\nabc\ta'
b = 'abc\nabc\ta'
print(a)
print(b)

运行结果如下:

Python基础学习参考(五):字符串和编码

对于a变量虽然在定义的时候前面加了个“r”但是它依然是一个字符串,并且里面的特殊字符串并没有转义直接打印出来了,原始字符串“r”作用就是将原来的字符串表示出来。而变量b只是定义了一个普通的字符串,在打印的时候\n,\t都进行了转义。区别是不是很明显了。

2.涉及内置方法

a.dir

Python在内置函数中有dir这样一个方法,它的作用就是查看对象所有的属性和方法,比如现在查看一下字符串涉及有哪些方法?

print(dir(str))

通过print将所涉及的方法打印出来。结果我就不给大家展示了,很多很多方法。后面会挑一些常用的给大家介绍。

b.len

len()这个内置函数,就是用来计算长度的。举例如下:

a = "abc"
print("长度是:", len(a))

最后输出结果:“长度是: 3”。使用很简单不再赘述。

C.enumerate

对于enumerate()这个函数用于遍历序列中的元素以及它们的位置下标,直接看例子:

a = "abc"
for n, i in enumerate(a):
print(n,i)

结果如下:

Python基础学习参考(五):字符串和编码

可以看到,前面是位置,后面是字符。字符串a经过enumerate以后变成了一个带位置索引的序列,通过for循环遍历出每个字符所在的位置和这个字符。后面介绍列表的时候还会使用到。

3.字符串方法

a.capitalize()将字符串的首字母变为大写,其余的都为小写,例子:

a = "green"
print(a.capitalize())

结果自己验证一下,看看“green”是否变为了“Green”

b.title()每个单词首字母大写,例子:

a = "this is a apple"
print(a.title())

结果:“This Is A Apple”

c.lower()和upper()将字符串变为全部小写和大写,例子:

a = "this is a apple"
print(a.upper())

结果就不演示了,自己试一下。

d. swapcase()反转大小写,用法跟上面都是一样的,自行感受一下

e.这里面还有一波is判断的方法:isnumeric()、isalpha()、isspace()、isalnum()、isdigit()、isdecimal()、islower()、istitle()、isprintable()、isupper()

选其中一个给大家举个例子:

a = ""
print(a.isnumeric())

运行结果:“True”说明字符串a都是由数字组成的,否则为Flase。这些方法就是用来判断的,返回的都是布尔类型。其他方法根据函数名自己试一下。

f.count()用来统计字符串中某个子字符串出现的位置,并且可以选开始和结束的位置。例子:

a = "lajdfljalsjfoiwejfsalfk"
print(a.count("al", 0, len(a)))

结果为:2,说明“al”字符串在a中出现了2次,在count中有三个参数,第一个参数是要统计的子字符串,第二个参数是开始统计的起始位置,默认为0,从头开始。第三个参数是统计的结束位置,不写默认一直到最后。上面其实可以改为:

a = "lajdfljalsjfoiwejfsalfk"
print(a.count("al"))

结果是一样的。

g.find()和rfind():用来查找字符串中是否包含子字符串,如果包含,返回查找到第一个子字符串的位置,如果没有查找到,返回-1,例子:

a = "lajdfljalsjfoiwejfsalfk"
print(a.find("al", 0, len(a)))

结果为:7,字符串“al”第一次出现的位置索引为7。其中find的参数用法和count是一样的。大家可以自己改写一下。rfind的用法和find差不多,他是查找子字符串出现的最后一次的位置。上面例子可以之间将find变为rfind试一下,看看结果有什么不同。

h.index()和rindex():用来查找字符串中是否包含子字符串,如果包含,返回查找到第一个子字符串的位置,如果没有找到,抛出异常。index的用法和find是一样的,唯一的不同是当没有查找到的时候返回的结果是不一样的。剩下用法完全一样,自己可以通过上面的例子试一下。rindex和rfind()是对应的。

i. endswith() startswith():用来判断字符串是否以指定的后缀结尾,如果以指定的后缀结尾返回True,否则返回False。例子:

a = "lajdfljalsjfoiwejfsalfk"
print(a.endswith("fk", 0, len(a)))

返回结果:“True”说明字符串a是以“fk”结尾的,endswith()三个参数,后面两个参数的用法跟count和find都是一样的,不再赘述了。startswith()当然就是用来判断以什么开头的了。

j.replace():将字符串中的某些字符替换为另外字符,变成另一个新的字符串(因为原字符串不可变)。例子:

a = "aljdfljalsjfoiwejfsalfk"
print(a.replace("al", "ZZZ", 2))

结果如下:“ZZZjdfljZZZsjfoiwejfsalfk”。细心的同学可能发现最后的“al”没替换,只替换了两个,这个时候第三个参数就发挥作用了,第三个参数就是用来限定被替换的次数的。例子中的第三个参数2表示最多替换2次。

k.strip(),lstrip()和rstrip(): 用来清除字符串左右两边指定的字符(默认为空格)。lstrip()只清除最左边的,rstrip()只清除最右边的。以strip()为例:

a = "aaaabcdaaaaa"
print(a.strip("a"))

运行结果为:”bcd”。字符串a中的左右两边的字符“a”。

l.splite()和rsplite():通过指定分隔符对字符串进行分隔,并返回一个分割后的列表。例子:

a = "lajdfljalsjfoiwejfsalfk"
print(a.split("al"))
print(a.split("al",1))

运行结果:

Python基础学习参考(五):字符串和编码

通过上面例子对比,可以看出splite中第二个参数表示要分割的次数,例子中的第二个参数1表示只分割1次。rsplite表示从右边开始分割一直到结束,使用时候都带有两个参数,如果只带一个参数和splite用法一样。例子:

a = "lajdfljalsjfoiwejfsalfk"
print(a.rsplit("al"))
print(a.rsplit("al",1))

运行结果:

Python基础学习参考(五):字符串和编码

m.join()这个方法放到后面说明,感兴趣的同学可以自己试着摸索一下。

三.字符编码

对于中国的coder来说,字符编码是一个永远绕不过去的坎。python2中默认编码是ASCII,而在python3中默认编码是utf-8,而中文通常都是使用GBK,gb2312或者gb18030,在*可能使用大五码,各个国家都有不同的编码方式,如果编码不同,势必会出来乱码的问题。为了更好的解决这个问题Unicode诞生了。Unicode是什么呢?简单点理解就是所有的编码的集合,包含了所有的语言。也就是说所有语言都用这一个标准,是不是就不会出现乱码的问题了。上面说的utf-8其实就属于Unicode的,而这二者的区别在于占用的空间大小不一样,简单点说utf-8更节省空间。

通过上面简单的描述,当字符串出现乱码怎么解决?可以知道Unicode是一个大管家,这样是不是可以先把某种编码格式的字符串先解码(通过decode()方法)转成Unicode,再用utf-8(python3一般用utf-8)编码(通过encode())出来是不是就解决问题了。上面也提到了python3默认是utf-8编码,utf-8就是Unicode,也就是说python3中乱码问题是很少遇到的。说到这里有个问题,在写代码的开头有时候需要加上# -*- coding: <encoding name> -*-这样一句话,用来声明文档的编码格式的(其中<encoding name>是代码所需要的编码格式,它可以是任意一种Python支持的格式,一般都会使用utf-8的编码格式),跟python中默认编码是两回事,要区分开。基础不好的同学可能对文中的各个编码格式都不太了解,这里我就不一一解释,大家可以自己学习,网上材料很多。这里对编码的问题的描述也不是很详细,也就给大家大概的描述了一下,脑海里留个印象知道有这么个东西,毕竟在python3对字符编解码方面的设计优化的很好了。

对于基础的学习没必要一下子说的太深太细,反而事倍功半,随着日后的学习一点点深入,每天学习一点点,生活美好一点点。

福利:关注微信公众号,回复 python书,可获得目前python学习的一些认可度比较高的电子书

Tips:上面涉及到的代码。初学者一定要认认真真的自己敲一下,所有的运行的结果我也都在文章中给出来了,千万不要眼高手低。初学者大忌,很多时候自己实现的结果和想象的是不一样的。

特此说明:作者的内容均为原创,转载表明出处。由于本人的能力水平有限,如有发现错误和纰漏请联系作者,拜谢!
如果软件安装使用python等内容还有写不明白的同学可以加入qq群:476581018交流,或者关注微信公众号(快扫下图(●’◡’●))系列文章会在公众号最新发布,欢迎大家持续关注,获取最新更新内容,并且有更多福利等你哦!

Python基础学习参考(五):字符串和编码

Python基础学习参考(五):字符串和编码的更多相关文章

  1. Python基础学习参考(一):python初体验

    一.前期准备 对于python的学习,首先的有一个硬件电脑,软件python的运行环境.说了一句废话,对于很多初学者而言,安装运行环境配置环境变量的什么的各种头疼,常常在第一步就被卡死了,对于pyth ...

  2. 【Python基础学习四】字符串(string)

    Python 字符串 字符串是 Python 中最常用的数据类型.可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可.例如: var1 = 'hello' va ...

  3. Python基础学习参考(三)&colon;内置函数

    一:内置函数 在第一篇文章中,我们简单的认识了一下print()函数和input()函数,也就是输入和输出,这些函数我们可以直接的调用,不要自己定义或者引入什么,对吧?想这样的函数就叫做内置函数.这里 ...

  4. Python基础学习参考(二):基本语法

    一.基本语法 既然是学习一门语言,它肯定有区别与其它语言的语法规则,现在就来解释一下python的语法规则是什么? 注释:通过"#"可以对python进行注释,注意是单行注释,如果 ...

  5. Python基础学习参考(七):字典和集合

    一.字典 字典跟列表一样是一组数据的集合.它的特点是什么呢? 特点一:字典具有键(key)和值(value),其中键必须是唯一的,不可重复的,即键必须可以哈希的.对于值没有要求. 特点二:字典是无序的 ...

  6. Python基础学习参考(六):列表和元组

    一.列表 列表是一个容器,里面可以放置一组数据,并且列表中的每个元素都具有位置索引.列表中的每个元素是可以改变的,对列表操作都会影响原来的列表.列表的定义通过"[ ]"来定义,元素 ...

  7. Python基础学习参考(四):条件与循环

    在实际的开发中,想要实现某些功能或者需求,里面必然涉及到一些逻辑,复杂的也好简单也好,那么,通过python语法如何实现呢?这就涉及到了条件与循环.很显然绝大多数的语言都有条件和循环的语法,pytho ...

  8. Python基础学习总结&lpar;五)

    7.用户输入输出和while循环 1.使用函数 input() 输入,print() 打印,字符串可以用逗号隔开.end=' ' 关键字参数,打印时可以不换行,sep=‘ 你想要的分隔符 ’,关键字参 ...

  9. python基础学习(五)while循环语句

    while循环基本使用 循环的作用就是让指定的代码重复的执行 while循环最常用的应用场景就是让执行的代码按照指定的次数重复执行 流程图 基本语法 初始条件设置 —— 通常是重复执行的 计数器 wh ...

随机推荐

  1. &lbrack;docker&rsqb; 管理docker容器中的数据

    之前我们介绍了Docker的基本概念(前面的没翻译...),了解了如何使用Docker镜像进行工作,并且学习了网 络和容器之间的链接.这一节我们将讨论如何管理容器中及容器之间的数据. 我们将查看下面两 ...

  2. Bootstrap 进度条媒体对象和条组

    列表组组件 列表组组件用于显示一组列表的组件. //基本实例 <ul class="list-group"> <li class="list-group ...

  3. 近期学习js总结

    都是一个细节问题老是犯错,还有就是之前的知识点没有去复习,老是犯错误.总结一下避免以后又犯错. 1.没有去检查对象是否存在 写完js就是忘记去检查是否存在,等到用到项目中才发现,代码如下:if(!ob ...

  4. C&num;对HTML转译需要注意的问题

    在做B/S程序时我们多少会用到一点HTML特殊符号转译. 如:“&”——>“&” , "<"——>"<" , &quot ...

  5. &lpar;菜鸟要飞系列&rpar;三,基于Asp&period;Net MVC5的后台管理系统(用户的增删改查功能)

    这些天被项目,考试整昏了头脑,没时间更新,我已经将这一部分全部做完了,现在把代码放上来,大家可以自己研究,有问题可以私聊,这里把图放上来 http://download.csdn.net/detail ...

  6. HTTP协议中的长连接和短连接(keep-alive状态)

    什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待在同 ...

  7. art&period;dialog 与 ajax 异步请求

    上周写了一些代码,涉及到jquery异步请求,这里归纳总结下,希望对刚接触编程的同学有帮助. 主要习惯使用 art.dialog 框架,非常好用,在异步请求上,它提供了很多简便的方法. 加载使用art ...

  8. 《Braid》碎片式台词

    谁见到过风? 你没有,我也没有. 但当树儿低下头, 便是风儿经过时. 便是风儿穿过的时候. 但当树叶微微摇首, 你没有,我也没有. 谁见到过风? 二.时间与宽恕 1.提姆要出发了!他要去寻找并救出公主 ...

  9. ACM字符串处理算法经典:字符串搜索

    语法:result=strfind(char str[],char key[]); 参数: str[]:在这个源字符串查找操作 key[]:搜索字符串.不能为空字符串 回报值:     假设查找成功. ...

  10. linux root修改密码失败

    问题: 当使用root修改密码时,报错passwd:Authentication token manipulation error 解决: 1.查看是否权限问题, /etc/passwd /etc/s ...