文件操作和字符编码
字符编码的实际应用
编码和解码
编码
将人类能够读懂的字符编码成计算机能够直接读懂的字符
解码
将计算机能够直接读懂的字符解码成人类能够读懂的字符
s1 = '事已至此 何不一搏'
"""
字符串前面如果加了字母b 表示该数据类型为 bytes类型
bytes类型可以看成是二进制
"""
"""
基于网络传输数据 数据都必须是二进制格式
所以肯定涉及到编码与解码
"""
字符编码
1.字符编码
计算机内部存储数据都是以二进制数字的形式储存
计算机基于点工作 而电信号只有高低电频两种状态
我们人为的将高低电频定义为数字1
低电频数字为0
假如0代表你
1代表我
00 01 10 11
000 001 ....
单位换算
比特位(二进制数的个数)
8bit = 1bytes 00000000相当于2**8种可能
1024B = 1kB
1024KB = 1MB
1024MB = 1G
1024GB = 1TB
1024TB = 1PB
我们强调的字符编码仅限于文本文件,其他文件都不适用
字符编码的发展史
计算机是由美国人发明的,美国人需要计算机识别英文,所以
美国人就发明了字符编码表(ASCII码),这个字符编码表
记录了英文与数字的对应关系
1bytes 来表示所有的英文及符号。 2**8=256种
所有英文字母加起来都不超过128种可能,留有余地
中国
中国人为了计算机识别中文,发明了我们自己的编码表(GBK码)
他里面记录了中文 英文 与数字的对应关系
GBK用2个bytes(远远不够)来表示中文及符号
生僻字可能会使用更多的bytes.
日本
日本人为了计算机能够识别日文,发明了(shift_JIS码)
记录了日文 英文与数字的对应关系
韩国
韩国人为了为了计算机能够识别韩文,发明了(Euc_kr码)
记录了韩文 英文与数字的对应关系
unicode万国码 几乎是所有国家文字与数字对应的关系
所有的字符用2bytes表示,不够也是继续增加
最后由引进utf8()
utf8转换格式 其实是缩写(unicode transformation format)
英文还是用1butes
中文改用3bytes
内存使用的编码表是unicode 硬盘使用的是utf8
文本文件编码统一使用utf8
如何解决乱码
数据当初以什么编码编的就以什么编码解即可
res1 = s1.encode('gbk')
print(res1)
res2 = res1.decode('euc_kr')
print(res2)
res3 = res1.decode('gbk')
print(res3)
python解释器层面
python2解释器默认的编码是ASCII码
1.文件头:必须写在文件的最上方 告诉解释器使用指定的编码
2.字符前缀:在使用python2解释器的环境下定义字符串习惯在前面加u
name = u'你好啊'
python3解释器默认的编码是utf8

文件操作
操作系统暴露给用户可以直接操作硬盘的快捷方式
1.打开文件、创建文件
2.编辑文件内容
3.保存文件内容
4.关闭文件
结构1(了解即可):
f1 = open()
f1.close()
结构2(推荐使用):
with open() as f:
pass
'''以后写路径为了防止特殊符号 直接加r'''
"""
open(文件的路径,文件的操作模式,文件的编码)
1.文件的路径是必须要写的
2.文件的操作模式、文件的编码有时候不用写(一会儿讲)
"""
"""上述操作open完最后都需要执行close 而close这一行很任意被遗忘"""
with open(r'a.txt', 'r', encoding='utf8') as f:
data = f.read()
print(data)
文件的读写方式
r read 只读模式:只能读不能写
w write 只写模式:只能写不能读
a append 只追加模式:在文件末尾添加内容
with open(r'a.txt', 'r', encoding='utf8') as f1:
f1.write('python是最牛逼的语言!!!')
"""
able在英语中大部分情况下表示的是 具备...的能力
readable 具备读的能力
writable 具备写的能力
...
"""
with open(r'a.txt', 'w', encoding='utf8') as f1:
f1.write('你们是我见过的最优秀一批学生1\n')
f1.write('你们是我见过的最优秀一批学生2\r')
f1.write('你们是我见过的最优秀一批学生3\n')
print(f1.read())
"""
换行 最早的时候:\r\n
为了节省空间支持一个字符 根据操作系统的不同可能有所区别
\n 、 \r
"""
文件的操作模式
文本模式 是默认的模式
r rt
w wt
a at
1.该模式只能操作文本文件
2.该模式必须要指定encoding参数
3.该模式读写都是以字符串为最小单位
二进制模式 可以操作任意类型的文件
rb 不能省略b
wb 不能省略b
ab 不能省略b
1.该模式可以操作任意类型的文件
2.该模式不需要指定encoding参数
3.该模式读写都是以bytes类型为最小单位
如果是按照二进制打开文件的,要写入或者读取一定要编码 解码。
'''
如果不进行decode解码输出的话会是:b'I am jiyongjia\xe5\x98\x89 !' 它是一个 <class 'bytes'> 非字符串,不好操作、
如果使用了decode 解码再输出的话,输出结果是一个I am jiyongjia嘉 ! 它是一个 <class 'str'>
文件的内置方法
read()
1.执行完之后光标在文件末尾 继续读取没有内容
2.当文件内容特别大的时候 容易造成内存溢出(满了)
readline()
readlines()
readable()
支持for循环
write()
writelines()
writable()
flush()

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构