
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'\xe4\xb8\x8a'
# 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参数(如果不知道默认是操作系统的默认编码)
只能和r/w/a连用 默认就是t
b 二进制 一定不能指定encoding参数
mode参数 可以不写 不写的话默认是rt
只能和r/w/a连用 该模式通常用来处理非文本文件
# encoding参数只在mode位文本模式的情况下才加
# 操作文件的方法
f.read() # 读取所有内容,光标移动到文件末尾
f.readline() # 读取一行内容,光标移动到第二行首部
f.readlines() # 读取每一行内容,存放于列表中
f.write('1111\n222\n') # 针对文本模式的写,需要自己写换行符
f.write('1111\n222\n'.encode('utf-8')) # 针对b模式的写,需要自己写换行符
f.writelines(['333\n','444\n']) # 文件模式
f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) # b模式
f.readable() # 文件是否可读
f.writable() # 文件是否可读
f.closed # 文件是否关闭
为防止忘记f.close(),推荐使用with关键字来帮我们管理上下文
with open('a.txt','w') as f:
f.encoding # 如果文件打开模式为b,则没有该属性END