Python第六课(字符编码/文件操作) >>>转到思维导图>>>转到中二青年
字符编码
# 字符编码针对的是文字。 # 字符编码只跟文本文件有关。 # 文本编辑器的输入和输出是两个过程。 # 字符编码表就是字符与数字的对应关系 ASCII码表 用八位二进制表示一个英文字符 GBK 用2Bytes表示一个中文字符,还是用1Bytes表示一个英文字母。最多能表示65535个字符 Unicode万国码 统一用2Bytes表示所有的字符 1.浪费存储空间 2.IO次数增加,程序运行效率降低(致命) # 当内存中的unicode编码格式数据存到硬盘的时候,会按照utf-8编码 # 会将unicode的英文字符由原来的2Bytes变成1Bytes # 会将unicode中文字符由原来的2Bytes变成3Bytes # 现在的计算机内存都是unicode,硬盘都是utf-8 unicode的两个特点 1.用户在输入的时候,无论输什么字符都能够兼容万国字符 2.其他国家编码的数据由硬盘读到内存的时候unicode与其他各个国家的编码都有对应关系 # 数据由内存保存到硬盘 内存中的unicode格式二进制数字 >>>编码(encode)>>>utf-8格式的二进制数据 # 硬盘中的数据由硬盘读到内存 硬盘中的utf-8格式的二进制数据>>>解码(decode)>>>内存中unicode格式的二进制数据 # 保证不乱码在于文本文件以什么编码编的就以什么编码解 # python2将py文件按照文本文件读入解释器中默认使用ASCII码 # python3将py文件按照文本文件读入解释器中默认使用utf-8 # 文件头 # coding:utf-8 因为所有的编码都支持英文字符,所以文件头才能够正常生效 # python3中字符串默认就是unicode编码格式的二进制数 # pycharm终端用的是utf-8格式,windows终端采用的是gbk格式。 encode() # 将unicode编码成可以存储和传输的utf-8的二进制数据 # bytes类型 字节串类型 你就把它当成二进制数据即可 decode() # 将硬盘中的utf-8格式的二进制数据解码成unicode格式的二进制数据 x = '上' res1 = x.encode('gbk') # 将unicode编码成可以存储和传输的utf-8的二进制数据 print(res1) # b'xe4xb8x8a' # bytes类型 字节串类型 你就把它当成二进制数据即可 res2 = res1.decode('gbk') # 将硬盘中的utf-8格式的二进制数据解码成unicode格式的二进制数据 print(res2) # 补充: # 你a他 # 1Bytes|1Bytes|1Bytes|1Bytes|1Bytes|1Bytes|1Bytes # 1+7bit|1+7bit|1+7bit|1+7bit|1+7bit|1+7bit|1+7bit
文件处理
# 什么是文件? # 操作系统提供给用户操作复杂硬件(硬盘)的简易的接口。 # 为什么操作文件? # 人或者应用程序需要永久的保存数据。 # 打开文件的模式 f = open() 文件句柄 = open('文件路径', '模式') # 打开文件的模式有(默认为文本模式): r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】 w,只写模式【不可读;不存在则创建;存在则清空内容】 a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】 t 文本文件 t在使用的时候需要指定encoding参数(如果不知道默认是操作系统的默认编码) b 二进制 一定不能指定encoding参数 mode参数 可以不写 不写的话默认是rt 只读的文本文件 这个t不写默认就是t # 操作文件的方法 f.read() # 读取所有内容,光标移动到文件末尾 f.readline() # 读取一行内容,光标移动到第二行首部 f.readlines() # 读取每一行内容,存放于列表中 f.write('1111 222 ') # 针对文本模式的写,需要自己写换行符 f.write('1111 222 '.encode('utf-8')) # 针对b模式的写,需要自己写换行符 f.writelines(['333 ','444 ']) # 文件模式 f.writelines([bytes('333 ',encoding='utf-8'),'444 '.encode('utf-8')]) # b模式 f.readable() # 文件是否可读 f.writable() # 文件是否可读 f.closed # 文件是否关闭 为防止忘记f.close(),推荐使用with关键字来帮我们管理上下文 with open('a.txt','w') as f: f.encoding # 如果文件打开模式为b,则没有该属性
END