一、字符编码
什么是字符编码?
能识别的是字符高级标识符,电脑只能识别0,1,要完成人与机器之间交流一定需要一个媒介,进行两种标识符的转化(两种标识符的对应关系)
对应关系形成的结构称之为:编码表
了解:编码表的发展史:
1、ASCII:字母、数字、英文字符与计算机01标识符对应关系
思考:如何将128个字符用01完全标签
二进制:11111111=>255=>1bytes(1字节)=>8个二进制位
2、中国:研究汉字与计算机01标识符的对应关系:gb2312=>GBK(***)=>GB18030
日本:Shift_JIS
棒子:Euc-kr
3、制造一个可以完成万国字符与计算机01标识符的对应关系的编码表
编码表:Unicode表
py2:ASCII,没有按万国编码,原因py2要诞生先于玩过编码
py3:utf-8采用万国编码来解释文本内容
Unicode:用2个字节来存储汉字,用2个字节来存储英文字母,占用空间较多,读取效率极高
Utf-8:用3-6个字节来储存汉字,用1个字节来存储英文字母,占用空间较少,读取效率低
总结:内存都是按Unicode存储数据,硬盘和cpu采用utf-8来存取数据
Unicode与utf-8采用的是一张Unicode编码表,utf-8是Unicode编码表体现方式,变长储存数据
变长优点:(大量数据都是以英文存在,所以utf-8空间更小)传输速度更快
软件打开文件读取数据的流程:
1、打开软件
2、往计算机发出一个打开文件的指令,来打开文件
3读取数据渲染给用户(存取编码不一致,乱码)
python解释器打开py文件的流程:
1、打开软件(python解释器)
2、往计算机发出一个打开文件的指令,来打开文件
3、逐行解释打开的文件内容(存取编码不一致,无法正常解释,崩溃),将执行结果展示给用户
解释失败的原因:
py2默认按ASCII来解释文件内容,py3默认按UTF-8来解释文件内容
文件头:encoding:编码表
二、三种字符串
1、Unicode字符串,默认字符串
s1 = u"abc你好 不好"
print(s1)
2、字节字符串
s2 = b"abc123xb7xb7" print(s2)
3、愿意字符串:不对字符串内存做任何操作(eg: 的转化)
s3=r"abc你好 不好" print(s3)
编码与解码
s = "123呵呵" n_b = bytes(s,encoding="utf-8") print(n_b) b =b"123xe5x91xb5xe5x91xb5" n_s = str(b,encoding="GBK") print(n_s)
重点:u""和b""之间的转换
#将u字符串编码成b字符串 u"".encode("utf-8") 例:print(u"你好".encode("utf-8"))
#将b字符串解码成u字符串 b"".decode("utf-8") 例:print(b"xe4xbdxa0xe5xa5xbd".decode("utf-8"))
三、文件操作
文件:硬盘中一块储存空间(虚拟的文件)
文件操作:根据文件名来操作硬盘的那块储存空间,操作方式:读read 写write
1、使用文件的三步骤:
1.1、打开文件
变量名 = 文件空间
文件路径 操作模式(读|写)编码
f = open("a.txt","r",encoding="utf-8")
1.2、操作文件
#将所有内容读取出来,如果设置读取长度,就按照规定长度读取 data = f.read() print(data) #一次读取一行 line = f.readline() print(line) #按行一次性全部读出 lines = f.readlines() print(lines) #逐步一行一行读取 #存入列表 l=[] for line in f: l.append(line) print(l) #去重 s = set() for line in f: s.add(line) print(s)
3、关闭文件
f.close() #释放炒作系统对文件的持有,变量f还被应用程序持有 print{f}
四、模式:
主模式:r:读 w:写 a:追加
从模式:b:按字节操作 t:按字符操作 +:可读可写
了解:x:写异常 U:被遗弃了
#基础写 #文件不存在:会新建文件,在操作文件 #文件存在:先清空文件,在操作文件 w = open("b.txt","w",encoding="utf-8") w = weite("456") w.close() print("end")