字符编码
# 字符编码是什么
计算机自己能理解的语言是二进制数,最小的信息标识是二进制数,8个二进制位表示一个字节;而我们人类所能理解的语言文字则是一套由英文字母、汉语汉字、标点符号字符、阿拉伯数字等等很多的字符构成的字符集。如果要让计算机来按照人类的意愿进行工作,则必须把人类所使用的这些字符集转换为计算机所能理解的二进制码,这个过程就是编码,他的逆过程称为解码。
字符编码的发展史
#ASCII编码:
最开始计算机在美国发明使用,需要编码的字符集并不是很大,无外乎英文字母、数字和一些简单的标点符号,因此采用了一种单字节编码系统。在这套编码规则中,人们将所需字符集中的字符一一映射到128个二进制数上,这128个二进制数是最高位为0,利用剩余低7位组成0000000001111111(0X000X7F)。0X00到0X1F共32个二进制数来对控制字符或通信专用字符(如LF换行、DEL删除、BS退格)编码,0X20到0X7F共96个二进制数来对阿拉伯数字、英文字母大小写和下划线、括号等符号进行编码。将这套字符集映射到0X00~0X7F二进制码的过程就称为基础ASCII编码,通过这个编码过程,计算机就将人类的语言转化为自己的语言存储了起来,反之从磁盘中读取二级制数并转化为字母数字等字符以供显示的过程就是解码了。
![]()
#GBK编码:
记录了英文、中文与数字的对应关系
1bytes(8bit)来表示英文
2bytes(16bit)来表示中文(很多时候都是3bytes)
#Euc_kr:记录了英文、韩文与数字的对应关系
#shift_JIS:记录了英文、日文与数字的对应关系
#unicode:万国码
所有的字符都是2bytes起步存储
会浪费空间和IO时间
#utf8:万国码的转换版本
"""
内存使用的是unicode 硬盘使用的是utf8
"""
字符编码实际应用、
#编码与解码
编码
将人类能够读懂的字符编码成计算机能够直接读懂的字符
解码
将计算机能够直接读懂的字符解码成人类能够读懂的字符
s1 = '时光不负有心人'
#编码(encode方法):
print(s1.encode('gbk'))
#b'\xca\xb1\xb9\xe2\xb2\xbb\xb8\xba\xd3\xd0\xd0\xc4\xc8\xcb'
#解码(decode方法):
s1 = b'\xca\xb1\xb9\xe2\xb2\xbb\xb8\xba\xd3\xd0\xd0\xc4\xc8\xcb'
print(s1.decode('gbk'))
![]()
文件操作简介
# 什么是文件:
操作系统暴露给用户可以直接操作硬盘的快捷方式
# 代码操作文件的流程:
1.打开文件、创建文件
2.编辑文件内容
3.保存文件内容
4.关闭文件
#python打开文件的语法结构:
1.
f = open() #用open方法打开文件
f.close() #需要使用close关闭IO流
2.
with open() as f:
pass #with结构会自动关闭 不需要使用close
文件的读写模式
1.r read 只读模式:只能读不能写
2.w write 只写模式:只能写不能读
3.a append 只添加模式,在文件的末尾添加内容
#r模式:
路径必须存在,不然会报错
with open(r'a.txt','r',encoding='utf8') as f
print(f.read()) #一次性读取文件全部内容
#w模式
路径不存在:自动创建文件
with open(r'b.txt', 'w', encoding='utf8') as f1:
f1.write('滴滴滴滴\n')
路径存在:先清空文件内容 之后再写入数据
#a模式
路径不存在:自动创建文件
with open(r'c.txt', 'a', encoding='utf8') as f1
路径存在:不会清空文件内容 而是在文件末尾等待新内容的添加
with open(r'a.txt', 'a', encoding='utf8') as f1:
f1.write('来了老弟')
文件的操作模式
t模式
文本模式 是默认的模式
r rt
w wt
a at
1.该模式只能操作文本文件
2.该模式必须要指定encoding参数
3.该模式读写都是以字符串为最小单位
b模式
二进制模式 可以操作任意类型的文件
rb 不能省略b
wb 不能省略b
ab 不能省略b
1.该模式可以操作任意类型的文件
2.该模式不需要指定encoding参数
3.该模式读写都是以bytes类型为最小单位
文件内置方法
read() # 一次性读取文件内容
1.执行完之后光标在文件末尾 继续读取没有内容
2.当文件内容特别大的时候 容易造成内存溢出(满了)
readline() # 一次只读一行内容
readlines() # 结果是一个列表 里面的各个元素是文件的一行行内容
readable() # 判断当前文件是否可读
支持for循环 # 一行行读取文件内容(推荐使用) 内存中同一时刻只会有一行内容
write() # 写入文件内容(字符串或者bytes类型)
writelines() # 可以将列表中多个元素写入文件
writable() # 判断文件是否可写
flush() # 相当于主动按了ctrl+s(保存)