Day09
字符编码的发展史
一家独大-->群雄割据-->天下一统
'''
1.一家独大
美国人发明计算机,创造了英文字符与数字的对应关系,ASCII码诞生了
ASCII码,用一个字节表示,8位能够表示256个字符,可以用来表示所有的大写和小写字母,数字0到9、标点符号,以及在美式英语中使用的特殊控制字符。
# A-Z : 65~90
# a~z : 97~122
2.群雄割据
当其他国家开始使用计算机时,就遇到了编码问题,于是各个国家都创造了自己的字符编码作为应对,
比如GBK(中国),euc_kr(韩国)
3.天下一统
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节)
UTF-8,是对Unicode编码的压缩和优化,所以UTF-8包含于Unicode,只是他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存…
'''
字符编码实际运用
'''
1.编码与解码
编码
将人类看得懂的语言编码为计算机能直接读懂的字符
解码
将计算机的语言解码成人类能读懂的语言
# encode 编码
s1 = '一二三四五'
print(s1.encode('gbk')) # b'\xd2\xbb\xb6\xfe\xc8\xfd\xcb\xc4\xce\xe5'
字符串前面加了字母b 表示该数据类型为 bytes类型
bytes类型可以看成是二进制
# decode 解码
s1 = b'\xd2\xbb\xb6\xfe\xc8\xfd\xcb\xc4\xce\xe5'
print(s1.decode('gbk')) # 一二三四五
基于网络传输数据,数据必须是二进制格式
2.乱码问题的解决
搞清楚数据之前的编码方式就可以解决
s1 = '一二三四五'
s2 = s1.encode('gbk')
print(s2) # b'\xd2\xbb\xb6\xfe\xc8\xfd\xcb\xc4\xce\xe5'
s3 = s2.decode('euc_kr')
print(s3) # 寧랗힛愷巧 乱码
s4 = s2.decode('gbk')
print(s4) # 一二三四五
3.python解释器层面
python2解释器默认编码是ASCII码。转码方式
1.在文件最上方,指定编码
# coding:utf8
# -*- coding:utf8 -*- 美化写法
2.在字符前缀加u
python3解释器默认编码是utf8
'''
:
文件操作简介
# 文件是操作系统给用户提供的操作硬盘的快捷方式
# 操作文件
1.打开、创建文件
2.编辑文件
3.保存文件
4.关闭文件
# 语法结构
1.结构1:
f1 = open()
f1.close()
2.结构2:
with open() as f:
pass
1.打开文件
'''
# open(r'绝对路径/相对路径')
# 写路径的时候方式特殊符号,在字符前加r
open(文件的路径,文件的操作模式,文件的编码)
1.文件的路径是必须要写的
2.文件的操作模式、文件的编码在r/w t可以不写,在r/w b必须写
open完最后都需要执行close 而close这一行容易被遗忘推荐是用下面方法
with open(r'路径','r',encoding='utf8') as f:
data = f.read()
print(data)
with中包含close()
'''
文件的读写
r read 只读
w write 只写
a append 只追加
'''
# r read
with open(r'a.txt', 'r', encoding='utf8') as f:
pass
路径不存在:直接报错
路径存在:打开文件
# w write
with open(r'a.txt', 'w', encoding='utf8') as f:
pass
路径不存在:自动创建文件
路径存在:先清空文件内容 之后再写入数据
# a append
with open(r'a.txt', 'a', encoding='utf8') as f:
pass
路径不存在:自动创建文件
路径存在:不会清空文件内容 而是在文件末尾添加内容
'''
文件的操作
1.t模式
文本模式,默认的模式
r = rt
w = wt
a = at
t可以省略
# t模式只能操作文本文件
# 必须指定encoding参数
# 读写以字符串为最小单位
2.b模式
二进制模式,可操作性任意类型文件
rb
wb
ab
b不可省略
1.不需指定encoding参数
2.读写以bytes为最小单位
文件内置方法
read() # 一次性读取文件内容
执行完后光标在文件末尾,重复读取读不到,文件很大时,内存会溢出
readline() # 一次读一行
readlines() # 返回一个列表,列表中的一个元素为一行内容
readable() # 判断文件是否可读
write() # 写入文件
writelines() # 将列表中的元素写入文件
writable() # 判断文件是否可写
flush() # ctrl s
作业
练习周末大作业
1.编写一个简易版本的拷贝程序
路径全部自定义
'''
c_path = input('请输入待复制文件的地址>>>:').strip()
v_path = input('请输入粘贴文件的地址>>>:').strip()
with open(c_path, 'rb') as f:
content = f.read()
with open(v_path, 'wb') as j:
j.write(content)
'''
2.结合文件编写用户注册登录功能
# 提前先创建一个空的userinfo.txt
用户注册 数据保存到文件中
用户登录 数据来源于文件
1.必须给我写出来
单用户注册登录
2.拔高练习
多用户注册登录
'''
'''
3.整理今日内容及博客、录音等
疫情有点严重,要上网课了
:

浙公网安备 33010602011771号