python中有个比较烦的地方就是编码
一、何为编码?
我的理解是:计算机是0和1的世界,所以计算机中的编码是指:将客观的感觉输入转换成主观(即转换为01)
二、何为字符编码?
既然知道了编码是将客观事物转换为主观事物,那是不是需要一套规则来规定这个过程是如何转换的?
所以要对自然语言的字符进行转换,就有了字符编码
字符编码就是一套规则,一套对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对的规则。
三、何为ASCII编码?
ASCII编码是字符编码的具体实现;
美国指定的这套ASCII编码,是对英语字符与二进制位之间的关系,做了统一规定;
ASCII 码一共定义了 128 个字符的对应转换;例如大写的字母A是65(二进制01000001)
其编码方案:1 字节对应 8 位二进制数;
八个二进制位就可以组合出256种状态,每一个状态对应一个符号,就是256个符号
四、何为Unicode编码?
ASCII编码显然不足展示世界上所有语言中的所有字符,所以unicode编码出现了;
其编码方案:所有的字符都用 4 个字节来表示,不够的就往前面补 0;
但可悲的是,unicode只是规定了各个符号的二进制代码,却没有规定这个二进制代码应该如何存储,而且也有空间浪费的存在
五、何为UTF-8编码?
utf-8根据字符的不同变换长度,且支持ASCII编码,可以将其理解为unicode的具体实现;
其编码方案:1、对于单个字节的字符,第一位设为 0,后面的 7 位对应这个字符的 Unicode 码点。因此,对于英文中的 0 - 127 号字符,与 ASCII 码完全相同。这意味着 ASCII 码那个年代的文档用 UTF-8 编码打开完全没有问题。
2、对于需要使用 N 个字节来表示的字符(N > 1),第一个字节的前 N 位都设为 1,第 N + 1 位设为0,剩余的 N - 1 个字节的前两位都设位 10,剩下的二进制位则使用这个字符的 Unicode 码点来填充。
解码规则:如果一个字节的第一位是 0 ,则说明这个字节对应一个字符;如果一个字节的第一位1,那么连续有多少个 1,就表示该字符占用多少个字节
六、三种编码方式在计算机内部是怎么被使用的呢?
在计算机内存中,统一使用Unicode编码;
当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码
Unicode转str:'a'.encode('utf-8')
七、python字符串是什么?
字符串是一系列字符组成的一种不可变序列;所以字符串具备序列类型都支持的操作
# 以下的s、t皆表示序列,x表示元素
x in s # 若s包含x,返回True,否则返回False
x not in s # 若s包含x,返回False,否则返回True
s + t # 连接两个序列
s * n # s复制n次
s[i] # s的索引第i项
s[i:j] # s切片从第i项到第j-1项
s[i:j:k] # s切片从第i项到第j-1项,间隔为k
len(s) # s的长度
min(s) # s的最小元素
max(s) # s的最大元素
s.index(x) # x的索引位置
s.count(x) # s中出现x的总次数
八、python字符串拼接
1、格式化类(%占位符)%d(代表一个整数)、%f(代表一个浮点数)、%x(代表一个16进制数)
例如:print('%s %s' % ('Hello', 'world')){}做占位符,format()函数拼接
例如:s1 = 'Hello {}! '.format('World')
2、拼接类+操作符、
例如:'Hello' + 'world'join()函数
例如:' '.join(str_list)
3、字符串乘法
例如:'hello' * 2
4、f-string
例如:
name = 'world'
myname = 'cat'
f'Hello {name}. My name is {myname}.'
总结:处理字符串列表等序列结构时,采用join()方式;
拼接长度不超过20时,选用+号操作符方式;
长度超过20的情况,高版本选用f-string,低版本时看情况使用format()或join()方式
九、python字符串拆分
字符串是不可变序列,所以字符串拆分过程是在拷贝的字符串上进行,并不会改变原有字符串;
所以python中是将长字符串拆分成一个列表split('分隔符', num)
splitlines(True|False) 按行拆分字符串
例如:
l = '''Hi there , my name is Python猫
Do you like me ?
'''
l.split(' ',3)
>>> ['Hi', 'there', ',', 'my name is Python 猫
Do you like me ?
']
'ab c
de fg
kl
'.splitlines()
>>> ['ab c', '', 'de fg', 'kl']
十、python替换字符串
十一、python查找字符串
正则表达式和 re 模块就是这样的工具,正则表达式用来定制匹配规则,re 模块则提供了 match() 、find() 及 findall() 等方法,它们组合起来
十二、python字符判断
参考:深入理解Python字符串的用法mp.weixin.qq.comPython拼接字符串的七种方式mp.weixin.qq.com