了解ASCII码
- ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。
- ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的最高位为二进制0)来表示所有的大写和小写字母、数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符。128 到255为扩展ASCII码。
UTF-8编码
- UTF-8编码是“可变长编码”,它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。UTF-8编码以一个字节表示英语字符(兼容ASCII),以3个字节表示中文,还有一些语言使用2个字节或4个字节。
- Python3.x完全支持中文字符,解析器默认采用 UTF-8解析源程序,无论是数字字符、英文字母、汉字都按一个字符来对待和处理。
字符串构造
- 在Python中字符串的构造,主要通过两种方法来实现,一是使用str函数,二是用单引号、双引号或三引号。在Python中,使用引号是一种非常便捷的构造字符串方式。
单引号或双引号构造字符串
- 在用单引号或双引号构造字符串时,要求引号成对出现。
- 如:‘Python World!’、‘ABC’、“what is your name?”,都是构造字符串的方法。
- 'string"在Python中不是一个合法的字符串。
单双引号构造字符串的特殊用法
-
如果代码中的字符串包含了单引号,且不用转义字符,那么整个字符串就要用双引号来构造,否则就会出错。
-
如果代码中的字符串包含了双引号,且不用转义字符,那么整个字符串要用单引号来构造。
字符串中引号的转义
- 上面代码中的反斜线“\”对字符串中的引号进行了转义,表示反斜线后的单引号是字符串中的一个普通字符,而不是字符串构造的边界字符
转义字符
- 转义字符以“\”开头,后接某些特定的字符或数字。
- Python中常用的转义字符:
原始字符串
- 假设在C:\test文件夹中有一个文件夹net,如何输出完整路径呢?可能你想到的是:
- 怎么会是这样的输出呢?原来字符串中“\t”和“\n”都表示转义字符。
- 正确的路径如何表示呢?
三重引号字符
- 三重引号字符串是一种特殊的用法。三重引号将保留所有字符串的格式信息。如字符串跨越多行,行与行之间的回车符、引号、制表符或者其他任何信息,都将保存下来。在三重引号中可以自由的使用单引号和双引号。
字符串格式化
%符号格式化字符串
- 字符串格式化涉及到两个概念:
- 格式以%开头,
- 格式化运算符%表示用对象代替格式串中的格式
- 最终得到一个字符串。
字符串格式化的一般形式
- [ ]中的内容可以省略;
- 简单的格式是%加格式字符,如%f、%d、%c等;
- 当最小宽度及精度都出现时,它们之间不能有空格,格式字符和其他选项之间也不能有空格,如%8.2f
常用字符串的含义
最小宽度和精度
- 最小宽度是转换后的值所保留的最小字符个数。
- 精度(对于数字来说)则是结果中应该包含的小数位数。
- 一次转换多个对象,这些对象表示成一个元组形式,位置与格式化字符一一对应,%.2f表示3.456727的格式形式,%4d表示89的格式形式,%s表示’Lily’的格式形式,逗号“,”原封不动输出。
进位制和科学计数法
- 把一个数转换成不同的进位制,也可按科学计数法进行转换。
- 以上代码表示将十进制数a分别转换为八进制串、十六进制串和科学计数法串。
- 案例(输出九九乘法表):
format()方法格式化字符串
- format()方法是通过{}和:来代替传统%方式。
- format方法格式化时,
- 可以使用位置参数,根据位置来传递参数;
- 可以通过索引值来引用位置参数,只要format方法相应位置上有参数值即可,参数索引从0开始;
- 可以使用序列,通过format方法中序列参数的位置索引和序列中元素索引来引用相应值;
- 可以用“*序列名称”的形式作为format方法的参数,通过位置依次将序列中的元素传递到目标字符串中。
- 可以使用关键参数的形式,也可用“**字典名”的形式将字典中的元素作为参数。
- 上面大括号最前面的0不写也可以。
- 带’f’前缀,类似于format()方法格式化字符串
字符串截取(类比列表)
- 字符串的截取就是取出字符串中的子串。截取有两种方法:一种是索引str[index]取出单个字符;另一种是切片str[[start]:[end]:[step]]取出一片字符。切片方式与列表部分介绍的一样。
- 字符串中字符的索引跟列表一样,可以双向索引。
字符串常用内置函数
1. len()
2. ord()
- 获取字符的Unicode码
3. chr()
- 把编码转换为对应的字符
4. max()
5. min()
- 代码案例(编写程序,输入一个字符串,分别统计大写字母、小写字母、数字以及其他字符的个数,并分别以前面介绍的3种字符串格式化方式分别显示各种字符个数。数字仅包括阿拉伯数字。):
s=input('请输入一个字符串:')
c1,c2,c3,c4=0,0,0,0
for i in s:
if "A"<=i<="z":
c1+=1
elif "a"<=i<="z":
c2+=1
elif"0"<=i<="9":
c3+=1
else:
c4+=1
# 三种打印方式
print("大写字母%d个;小写字母%d个;数字%d个;其他字符%d个。"%(c1,c2,c3,c4))
print("大写字母{0}个;小写字母{1}个;数字{2}个;其他字符{3}个。".format(c1,c2,c3,c4))
print(f"大写字母{c1}个;小写字母{c2}个;数字{c3}个;其他字符{c4}个。")
6. center()、ljust()、rjust()
-
格式:
- center(self, width, fillchar=’ ', /)
- ljust(self, width, fillchar=’ ', /)
- rjust(self, width, fillchar=’ ', /)
-
说明:
- width:指定宽度;
- fillchar:填充的字符,默认为空格。
-
功能:
- 返回一个宽度为width的新字符串,原字符串居中(左对齐或右对齐)出现在新字符串中,如果width大于字符串长度,则使用fillchar进行填充。
- 返回一个宽度为width的新字符串,原字符串居中(左对齐或右对齐)出现在新字符串中,如果width大于字符串长度,则使用fillchar进行填充。
-
使用format()方法和ljust()方法打印出九九乘法表:
for i in range(1,10):
for j in range(1,i+1):
print("{0}*{1}={2}".format(i,j,i*j).ljust(8),end="")
print()
7. lower()、upper()
- lower()方法将大写字母转换为小写字母,其他字符不变,并返回新字符串。
- upper()方法将小写字母转换为大写字母,其他字符不变,并返回新字符串。
- 代码案例(有一批淘宝用户名"风云Th"、“Brown”、“飘然12345”、“云S”、“thomas”、“青山依旧QSYJ”,编写程序,将这些用户名存储在一个列表中,查找用户名"thomas"是否存在。要求输入的thomas大小写无关,即输入Thomas、THOmas、thoMAs等均能找到):
names=["风云Th","Brown","飘然12345","云S","thomas","青山依旧QSYJ"]
name=input("请输入用户名:")
for i in names:
if name.lower() ==i.lower():
print("找到")
break
else:
print("未找到")
8. capitalize()、title()、swapcase()
- capitalize()方法将字符串首字母转换为大写形式,其他字母转换为小写形式。
- title()方法将每个单词的首字母转换为大写形式,其他部分的字母转换为小写形式。
- swapcase()字符将大小写互换。均返回新字符串,原字符串对象不做任何修改。
9. islower()、isupper()、isdigit()
- 功能:测试字符串是否为小写、大写、数字。如果是,则返回True;否则返回False。
- 小小案例(利用isupper()、islower()、isdigit()分别判断是否为大写字母、小写字母、数字字符,并分别统计三种字符的个数。用字符串格式化方式分别显示三种字符的个数):
s=input('请输入一个字符串:')
c1,c2,c3,c4=0,0,0,0
for i in s:
if i.isupper():
c1+=1
elif i.islower():
c2+=1
elif i.isdigit():
c3+=1
else:
c4+=1
print(f"大写字母{c1}个;小写字母{c2}个;数字{c3}个;其他字符{c4}个。")
10. find()、rfind()
-
格式:
- S.find(sub[, start[, end]])
- S.rfind(sub[, start[, end]])
-
说明:
- sub:字符串(子串);
- start:开始位置;
- end:结束位置。查找范围start开始,end结束,不包括end。
-
功能:
- 在一个较长的字符串S中,在[start,end)范围内查找并返回子串sub首次出现的位置索引,如果没有找到则返回-1。默认范围是整个字符串。其中find()方法从左往右查找,rfind()方法从右往左查找。
- 在一个较长的字符串S中,在[start,end)范围内查找并返回子串sub首次出现的位置索引,如果没有找到则返回-1。默认范围是整个字符串。其中find()方法从左往右查找,rfind()方法从右往左查找。
11. index()、rindex()
- 格式:
- S.index(sub[, start[, end]])
- S.rindex(sub[, start[, end]])
- 功能:
- 在一个较长的字符串S中,查找并返回在[start,end)范围内子串sub首次出现的位置索引,如果不存在则抛出异常。默认范围是整个字符串。其中index()方法从左往右查找,rindex()方法从右往左查找。
12. count()
- 格式:S.count(sub[, start[, end]])
- 功能:在一个较长的字符串S中,查找并返回[start,end)范围内子串sub出现的次数,如果不存在则返回0。默认范围是整个字符串。
13. split()
- split(self, /, sep=None, maxsplit=-1)
- 功能:以指定字符为分隔符,从左往右将字符串分割开来,并将分割后的结果组成列表返回。
- sep表示分割符;maxsplit表示最大分割次数,-1表示不限次数
- 如果字符串中的某种字符出现0次或多次,可以利用split()方法,根据该字符把字符串分离成多个子串组成的列表。
- 对于split(),如果不指定分隔符,实际上表示以任何空白字符(包括连续出现的)作为分隔符。空白字符包括空格、换行符、制表符等。
- 除了split(),还有rsplit(),表示从右往左将字符串分割开来,这两种方法还能指定最大分隔次数。
14. join()
- join()方法可用来连接序列中的元素,并在两个元素之间插入指定字符,返回一个字符串。
- join()方法是split()方法的逆方法。
15. replace()
- replace(old,new,count=-1)方法查找字符串中old子串并用new子串来替换。参数count默认值为-1,表示替换所有匹配项,否则最多替换count次。返回替换后的新字符串。
16. maketrans()、translate()
- maketrans()方法生成字符映射表,translate()方法是根据字符映射表替换字符。这两种方法联合起来使用可以一次替换多个字符。
17. strip(self, chars=None, /)
- strip()方法去除字符串两侧的空白字符或指定字符,并返回新字符串。
- 思考:如何去除字符串中间的空格?
正则表达式
- 正则表达式是一个特殊的字符序列,利用事先定义好的一些特定字符以及它们的组合,组成一个“规则”,检查一个字符串是否与这种规则匹配来实现对字符的过滤或匹配。正则表达式是字符串处理的有力工具,但是并不是Python独有的,其他语言也有。
- Python中,re模块提供了正则表达式操作所需要的功能。
- 大多数字母和字符一般都会和自身匹配。如果在字符串前面加了r,表示对字符串不进行转义。有些字符比较特殊,它们和自身并不匹配,而是表明应和一些特殊的东西匹配,或者会影响重复次数。这些特殊的字符我们称之为元字符。
- re模块中findall()方法以列表的形式返回所有能匹配的子串,如果没有找到匹配的,则返回空列表。
一些常用的正则表达式元字符
1. “.”:表示除换行符以外的任意字符
- 与“.”类似(但不相同)的一个符号是“\S”,表示不是空白符的任意字符。注意是大写字符S。
2. “[]”:指定字符集
- 常用来指定一个字符集,例如:[abc]、[a-z]、[0-9];
- 元字符在方括号中不起作用,例如:[akm$]和[m.]中元字符都不起作用;
- 方括号内的“ ^ ”表示补集,匹配不在区间范围内的字符,例如:[^3]表示除3以外的字符。
3.“ ^ ”:匹配行首,匹配以^后面的字符开头的字符串
4.“ $ ”:匹配行尾,匹配以$之前的字符结束的字符串
5.“\”:反斜杠后面可以加不同的字符以表示不同的特殊意义
- \b匹配单词头或单词尾;
- \B与\b相反,匹配非单词头或单词尾;
- \d匹配任何十进制数;相当于
[0-9]
; - \D与\d相反,匹配任何非数字字符,相当于
[^0-9]
; - \s匹配任何空白字符,相当于
[\t\n\r\f\v]
; - \S与\s相反,匹配任何非空白字符,相当于
[^\t\n\r\f\v]
; - \w匹配任何字母、数字或下画线字符,相当于
[a-zA-Z0-9_]
; - \W与\w相反,匹配任何非字母、数字和下画线字符,相当于
[^a-zA-Z0-9_]
; - 也可以用于取消所有的元字符:
\\
、\[
。 - 这些特殊字符都可以包含在[]中。如:
[\s,.]
将匹配任何空白字符、“,“或”.”。
- 正则表达式除了能够匹配不定长的字符集,还能指定正则表达式的一部分的重复次数,所涉及的元字符有“*”、“+”、“?”、“{}”。
6.“ * ”:匹配位于*之前的字符或子模式的0次或多次出现
7.“+”:匹配位于+之前的字符或子模式的1次或多次出现
8.“?”:匹配位于?之前的0个或1个字符
- 当“?”紧随其他限定符(*、+、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。
9.“{m,n}”:表示至少有m个重复,至多有n个重复。m,n均为十进制数
- 忽略m表示0个重复,忽略n表示无穷多个重复。
- {0,}等同于*;{1,}等同于+;{0,1}与?相同。但是如果可以的话,最好使用*、+、或?。