字符编码和文件处理
一:字符编码
1:知识储备
引用程序运行在操作系统之上,操作系统负责接受应用程序的请求,调用硬件完成操作,操作系统运行在硬件之上。
2:什么是字符编码
计算机要想工作必须通电,即用‘电’驱使计算机干活,也就是说‘电’的特性决定了计算机的特性。电的特性即高低电平(人类从逻辑上将二进制数1对应高电平,二进制数0对应低电平),计算机通过识别二进制的1,0来进行工作,同时计算机也只能识别1,0来驱动。那么我们平时使用计算机时,用的都是能看懂的各种字符,并不使用二进制来使用计算机,那么我们是如何将人类使用的字符转换成计算机能识别的二进制的呢?
我们将字符翻译成机器能够识别的二进制数:这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码
二:字符编码在python中涉及的场景
python文件执行时有三个阶段
1:启动解释器
2:读取文件内容
3:解释执行
一个python文件中的内容是由一堆字符组成的,存取均涉及到字符编码问题(python文件并未执行,前两个阶段均属于该范畴)
python中的数据类型字符串是由一串字符组成的(python文件执行时,即第三个阶段)
三:字符编码总结
保证不乱吗的核心法则就是,字符按照什么标准而编码的,就要按照什么标准解码,此处的标准指的就是字符编码。
在内存中写的所有字符,一视同仁,都是unicode编码,比如我们打开编辑器,输入一个“你”,我们并不能说“你”就是一个汉字,此时它仅仅只是一个符号,该符号可能很多国家都在使用,根据我们使用的输入法不同这个字的样式可能也不太一样。只有在我们往硬盘保存或者基于网络传输时,才能确定”你“到底是一个汉字,还是一个日本字,这就是unicode转换成其他编码格式的过程了。
#实例解答
# 1、python3中的unicode转成其他编码称为编码还是解码,使用的方法是什么,得到的结果是什么类型
unicode转成其他编码称为编码,encode,得到的是bytes类型
# 2、python3中的bytes类型转成unicode的过程称为编码还是解码,使用的方法是什么,得到的结果是什么类型
bytes类型转成unicode的过程称为解码,使用的方法是decode,得到的是str类型
学习字符编码帮助我们在更深层次理解了应用程序和硬件的交互。当我们打开程序,程序运行时,输入的字符在内存中以unicode编码缓存,当我们点击保存文件时,如果指定了编码方式(例如gbk),将字符以gbk编码方式保存在硬盘中。
当我们重新打开程序,启动这个文件时,通知操作系统读取硬盘,如果应用程序程序窗口默认编码是gbk,那么可以直接解码成字符,如果是utf-8,那么操作系统读取到硬盘中的gbk编码后,通过编码方式和Unicode的对照,将gbk转换成Unicode,再由Unicode转换成utf-8。
四:文件处理
1:操作文件处理流程
1. 打开文件,得到文件句柄并赋值给一个变量
2. 通过句柄对文件进行操作
3. 关闭文件
2:文件打开过程分析
1、由应用程序向操作系统发起系统调用open(...)
2、操作系统打开该文件,并返回一个文件句柄给应用程序
3、应用程序将文件句柄赋值给变量f,由于文件打开占用了操作系统和应用程序两个的资源程序关闭后,内存释放,但是操作系统占用的资源没有被释放,所以必须要以f.close()关闭文件
3:with打开文件的方法
with open('a.txt','r') as f: data=read_f.read() write_f.write(data)
4:打开文件的模式
只读模式‘r’ :文件不存在,会报错,是文件默认打开模式。
只写模式‘w’:文件只可写,文件若无,则创建一个空文件,文件若有,则清空文件。
追加模式‘a’:不可读,问不存在则创建,存在则追加。
5::文件的循环读取
读取文件时,可以以用f.readline()和f.readlines(),在文件内容较小时,两种方法都可以使用,但是文件较大的话,使用f.readline()读取文件,因为文件内容过大的话f.readlines()创建的列表会占据很大的内存空间,可能会爆掉内存。