字符编码与文件处理

本文介绍了字符编码相关知识,包括其定义、研究原因及编码表发展历程,如ASCII、GBK等。还阐述了运行Python程序的三个阶段,以及文件处理的上下文管理、打开模式,如控制读写操作和内容的不同模式,强调了不同模式下编码的使用要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符编码
1、什么是字符编码
文字符号--------编码------------>数字
文字符号<--------解码------------数字
我们要将计算机上的文件数据保存到硬盘当中,但肯定不能直接保存进去,硬盘只能接受二进制,所以我们在保存进硬盘的时候都会先将其转换为二进制

字符编码表:
    一个字符对应一个数字

2、为何要研究字符编码
为了解决乱码问题:
1、存取都用同一张字符编码表

3、字符编码表的发展历程
1、一家独大
ASCII:只能识别英文字符
用8个bit对应一个英文字符
最开始美国制定字符编码的时候考虑到是为了自己的人使用,所以能接受转换的只有英文,只有这一种编码表,所以能互相交流
2、天下大乱
GBK:能识别中文和英文
用16个bit(2Bytes)对应一个字符
后来电脑发展,各个国家也开始使用,但由于有些国家并不是英语为主体的,所以他们也制作了适合自己国家的字符编码,但由于语言不是互通的,导致有些并不能翻译,就会导致乱码
shift-JIS(日本的字符编码)

    Euc-KR
3、归于一统
    unicode:能识别万国字符
        用16bit(2Bytes)对应一个字符

    utf-8

后来统一制作能识别万国字符的unicode,所以现在可以解码很多数据,utf-8可以看作unicode的稳定升级版,但是并不能拿来完全解码,只有等到使用unicode的旧软件退场后才能完全使用,现在大部分软件都是默认utf-8,就是为了方便编码和解码

总结:
英文字符----》内存(ASCII格式的二进制数)----》硬盘(ASCII格式的二进制数)

中文、英文字符—》内存(GBK格式的二进制数)----》硬盘(GBK格式的二进制数)
日文、英文字符—》内存(Shif-jis格式的二进制数)–》硬盘(Shif-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")#将x用utf-8进行编码
# print(utf8_res,type(utf8_res))  # bytes等于二进制#输出编码后的二进制,也输出类型

unicode_res=utf8_res.decode("utf-8")#用utf-8格式进行解码
print(unicode_res)#输出解码后的内容

文件处理的基本步骤

# f=open("aaa.py",mode='rt',encoding='gbk')#打开aaa.py文件,模式用只读,用txt显示,字符编码是gbk
#
# res=f.read()#先读里面的内容并且赋值给res
# print(res)#输出res
#
# f.close()#关掉操作系统占用的资源

# f.read()#没法调用这个功能

上下文管理

with open(“aaa.py”,mode=‘rt’,encoding=‘gbk’) as f:#调用with方法,当代码离开with语句时,会自动关闭
res = f.read()
print(res)

文件打开模式
一:控制读写操作模式
r:只读===========>默认(只要不写出来就是默认状态)
w:只写(如果存在文件,就会清空文件内容)
a:只追加写(跳转到文件末尾来追加,注意不是最后一行新添加一行,是直接接着最后一行后面)

二:控制读写内容的模式
t:读写都是文本格式,即读写都是用字符串========》默认
b:读写都是bytes格式,bytes等同于二进制#使用b的时候不用指定字符编码,但是要注意打开的文件大小,因为可能文件过大会对内存有影响

强调:
如果是t模式,一定记住加上encoding=“编码格式”
如果是b模式,一定记住别加encoding=“编码格式”

三 案例

# 3.1 案例1
# r:在文件存在的时候,文件指针调到文件开头,文件不存在直接报错
# f=open("a.txt",mode="rt",encoding='utf-8')
# # res=f.read()
# # print(res)
# f.close()
3.2 案例2
# w:在文件存在的时候会清空文件,文件指针调到文件开头,文件不存在会创建空文档
# f=open("c.txt",mode="wt",encoding='utf-8')
# # f.write("aaaa\n")
# # f.write("bbbb\n")
# # f.write("cccc\n")
# f.write("11111\n")
# f.close()
3.3 案例3
# a:在文件存在的时候不会清空文件,文件指针调到文件末尾,文件不存在会创建空文档
# f=open("d.txt",mode="at",encoding='utf-8')#a是追加,只会在末尾继续写,要换行需要自己添加换行符
# f.write("6666666\n")
# f.write("6666666\n")
# f.write("6666666\n")
# f.write("11111\n")
# f.close()
3.4 案例4:rb wb ab
# f=open("a.txt",mode='rb')#用二进制的方式打开文件
# res=f.read()#将读的结果赋值给res
# print(res.decode("utf-8"))#用utf-8解码并打印
# f.close()#回收计算机资源

# f=open("D:\fullstack16\day05\视频\01 本周内容.mp4",mode='rb')#用二进制的方式打开文件
# res=f.read()#将读的结果赋值给res
# print(res)#打印结果
# f.close()#回收资源

# f=open("a.txt",mode='ab')#打开文件,模式是追加,二进制
# f.write("你好".encode('utf-8'))#写入你好,并且用utf-8编码
# f.close()#回收资源

# with open(r"D:\fullstack16\day05\视频\01 本周内容.mp4",mode='rb') as f1,\
#     open(r"D:\111111.mp4",mode="wb") as f2:#打开两个文件,并且f1的是仅读,并且是二进制,f2的是仅写,二进制
# res=f1.read()#将读的结果赋值给res
# f2.write(res)#将res的内容写入f2
这个方法适用于打开的文件不是很大的情况,不然内存容易被占满,容易卡住

# for line in f1:#循环读出f1里的内容
#     f2.write(line)#将line里的内容依次写入f2里
这个方法适用于内容比较大的文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值