字符编码介绍,文件的操作模式
字符编码简介
# 字符编码只针对文本文件
计算机最早诞生在美国,但是计算机只认识二进制,美国人用的英语,为了让计算机能够识别英语,就发明了一个英文字符与数字的对应关系,并列成了一个表,叫“字符编码表”
字符编码的发展史
1.一家独大
上面说了,字符编码最早是美国人发明的,只能识别英文,那张字符编码表也只记录了英文字符与数字的对应关系,字符编码表又叫ASCII码。
其中主要的是:英文使用1bytes(8bit)来表示英文
'''
A-Z:65-90
a-z:97-122
'''
# 所有的英文字符加起来不超过2的七次方(当时给预留了一位,是为了后续发现新语言做准备)
2.群雄割据
随着时间的发展,其他国家也开始使用计算机,但是计算机只认识ASCII码只认识英文,那能行吗,所以各个国家也开始制作自己国家的字符编码
中国发明了一个中文,英文,数字有对应关系的编码表,叫GBK
中文采用两到三个bytes(16bit)来表示中文
这个阶段最大的缺点就是,计算机只认识自己国家的语言,一个国家的文件发给另一个文件,会造成乱码的现象,因为文件在进行字符编码比对时,拿的不是一个参照表了
3.天下一统
天下合久必分,分久必合, 后来出来了一个:
unicode:万国码
能够兼容所有国家的语言(该表中记录了所有国家的字符与数字的对应关系)
所有的字符都用2bytes起步存储,但是浪费空间和IO时间
针对这一问题,在内存里面的unicode存储到硬盘的过程中对unicode进行了优化处理,也就是UtF8,将unicode中的英文使用一个bytes来存储,中文改用三个
字符编码的实际应用
-
编码与解码
基于网络传输数据,数据都必须是二进制格式,所以肯定涉及到编码与解码
编码
编码:将人类能够读懂的字符编码成计算机能够直接读懂的字符 用法 encode eg:encode('放字符编码类型')
解码
解码:将计算机能够直接读懂的字符解码成人类能够读懂的字符 用法:decode eg:decode('放字符编码类型')
乱码
乱码就是字符编码用错了的意思,只需要将它转换为对应的编码解码即可 # 在python解释器层面 python2解释器默认的编码是ASCII码,因为那时候还没有万国码,所以使用python2的时候需要在文件的最上方,写上指定使用的编码,# coding:utf8 在使用python2解释器的环境下定义字符串习惯在前面加u python3中默认的就是utf8
文件操作的简介
-
什么是文件
操作系统暴露给用户可以直接操作硬盘的快捷方式
-
代码操作文件的流程
1.打开文件、创建文件 2.编辑文件内容 3.保存文件内容 4.关闭文件
-
基本语法结构
结构1: f1 = open() f1.close() 结构2:推荐使用 with open() as f: pass(用于补齐语法结构,没有其他含义) open 打开文件,可以是相对路径或绝对路径 # open(文件的路径,文件的操作模式,文件的编码) 1. 文件的路径是必须要写的 2. 文件的操作模式 3. 文件的编码 read()读取文件内容 close()关闭文件 打开的文件最后都要执行close,而close在结构1很容易被遗忘,所以推荐结构2 with open(文件的路径,文件的操作模式,文件的编码) as f: pass
文件的读写模式
r read 只读模式:只能读不能写
w write 只写模式:只能写不能读
a append 只追加模式:在文件末尾添加内容
r模式 路径不存在直接报错
路径存在:正常打开文件并等待内容读取
read() # 一次性读取文件内所有的内容
w模式 路径不存在自动创建文件
路径存在先清空文件内容,之后再写入数据
a模式 路径不存在:自动创建文件
路径存在不会清空文件内容,而是直接在文件的末尾等待新内容的添加
# readable 是否有读的能力
# writeable 是否有写的能力
文件的操作模式
-
t模式
文本模式,是默认的模式 r rt w wt a at # t可加可不加 该模式只能操作文本文件 该模式必须要指定encoding参数 该模式读写都是以字符串为最小单位
-
b模式
二进制模式,可以操作任意类型的文件 rb wb ab # b不能省略 该模式可以操作任意类型的文件 该模式不需要指定encoding参数 该模式读写都是以bytes类型为最小单位
文件的内置方法
read() # 一次性读取文件内容
1.执行完之后光标在末尾,继续读取没有内容
2.当文件内容特别大的时候,容易造成内存溢出
readline() # 一次只读一行内容
readlines() # 结果是一个列表 里面的各个元素是文件的一行行内容
readable() # 判断当前文件是否可读
支持for循环 # 一行行读取文件内容,内存中同一时刻只会有一行内容,这样既能读完内容,还不占用内存空间,不会造成内存溢出
write() # 写入文件内容(字符串或者bytes类型)
weitelines() # 可以将列表中多个元素写入文件
writable() # 判断文件是否可写
flush # 相当于主动按了ctrl+s(保存)