字符编码及文件处理
"""
1、什么是字符编码?
文字符号-----------编码----------->数字
文字符号<----------解码------------数字
字符编码表:
一个字符对应一个数字
2、为什么要研究字符编码?
为了解决乱码问题:
存取都用同一张字符编码表
3、储备知识
CPU 内存 硬盘
三个步骤
4、字符编码表的发展历程
1、一家独大
ASCⅡ:只能识别英文字符
用8个bit对应一个英文字符
2、天下大乱
GBK:能识别中文和英文
用16个bit(2Bytes)对应一个字符
shift-JIS
Euc-KR
3、归于统一
unicode:能识别万国字符
常用的16bit(2Bytes)对应一个字符
总结:
英文字符------->内存(ASCⅡ格式的二进制数)---->硬盘(ASCⅡ格式的二进制数)
中文、英文字符------->内存(GBK格式的二进制数)---->硬盘(GBK格式的二进制数)
日文、英文字符--->内存(shift-JIS格式的二进制数)-->硬盘(shift-JIS格式的二进制数)
万国字符----->内存(Unicode格式的二进制数)---->硬盘(utf-8格式的二进制数)
5、运行python程序的三个阶段
1、先启动一个python解释器
2、python解释器会将文件内容从硬盘读入内存
3、python解释器会解释执行刚刚读入内存的代码,识别语法
x = "你好Hello"
"""
# 字符-------->unicode格式的二进制(内存)---------------->utf-8格式的二进制(硬盘)
# 编码 编码
# 字符<--------unicode格式的二进制(内存)<----------------utf-8格式的二进制(硬盘)
# 解码 解码
# x = "上"
# print(x) # 打印unicode相当于打印字符
#
# utf8_res = x.encode("utf-8")
# # print(utf8_res, type(utf8_res)) # b'xe4xb8x8a' <class 'bytes'>
# unicode_res = utf8_res.decode("utf-8")
# print(unicode_res)
# 1、打开步骤
# f = open("aaa.py", mode='rt',encoding='utf-8')
# res = f.read()
# print(res)
# f.close()
# # f.read
# 上下文管理
# with open("aaa.py", mode='rt',encoding='utf-8') as f:
# res = f.read()
# print(res)
# f.close()
# 2 文件打开模式
# Ⅰ 控制读写操作模式
# r: 只读(默认)
# w: 只写
# a: 只追加写
# Ⅱ 控制读写内容的模式
# t: 读写都是文本格式,即读写都是用字符串(默认)
# b: 读写都是bytes格式,bytes等同于二进制
# 强调:如果是t模式,一定要记住加上encoding="编码格式"
# 强调:如果是b模式,一定要记住不要加上encoding="编码格式"
# r:在文件存在的时候,文件指针调到文件的开头,文件不存在直接报错
# f = open("a.txt", mode="rt", encoding="utf-8")
# res = f.read()
# print(res)
# f.close()
# w:在文件存在的时候会清空文件,指针调到文件开头,文件不存在会创建空新文件
# f = open("a.txt", mode="wt", encoding="utf-8")
# f.write("你好
666")
# f.close()
# a:在文件存在的时候不会清空文件,指针跳到文件末尾,文件不存在会创建空新文件
# f = open("a.txt", mode="at", encoding="utf-8")
# f.write("
777")
# f.close()
# f = open("a.txt", mode="r+", encoding="utf-8")
# f.write("554")
# f.close()
# rb wb ab
# f = open("a.txt", mode="rb")
# res = f.read()
# print(res)
# print(res.decode("utf-8"))
# f.close()
# f = open("a.txt", mode="wb")
# f.write("你好".encode('utf-8'))
# f.close()
with open(r'H:BaiduNetdiskDownloadLinux阶段总结imgday004主板.png', mode='rb') as f1,
open(r'C:Users曹嘉鑫Desktop1111.png', mode='wb') as f2:
# res = f1.read()
# f2.write(res)
for line in f1:
f2.write(line)
f1.close()
f2.close()