字符编码及文件处理
字符编码及文件处理
字符编码:针对的文字,而像视频、音频文件等都不需要考虑,只要考虑文本文件就可以
# 文本编辑器的输入与输出是两个过程 输入(人能看懂的字符)>>>(字符编码表)>>>二进制数字(计算机能识别的)
# 字符编码表就是字符与数字的对应关系
字符编码表:
1. ASCII码表:八位二进制表示一个英文字符(所有的英文字符+符号也就125位左右)
# 八位二进制也叫8bit(******)
# 8bit = 1 Bytes
# 1024 Bytes = 1 KB
# 1024 KB = 1 MB
# 1024 MB = 1 GB
# 1024 GB = 1 TB
# 1024 TB = 1 PB
2. GBK:用2个Bytes表示一个中文字符,1个Bytes表示一个英文字符(十六位二进制,所以最多能表示65535个字符)
此外还有日本及韩国的字符编码表。
任何一个国家想让计算机支持本国语言都必须创建一个字符与数字的对应关系,所以:万国码(unicode):统一用2个Bytes表示所有的字符。
当输入时,在内存中经过unicode编码后同一编码成UTF-8格式(unicode transformation formate)存入硬盘;编码后的英文字符由原来的2Bytes变成1Bytes,中文字符由2Bytes变成3Bytes
*************现在计算机内存都是unicode,硬盘都是UTF-8**********************
uincode的特点:
①用户在输入的时候,无论什么字符都能够兼容万国字符
②其他国家编码的数据由硬盘读取到内存中的时候unicode与其他各个国家的编码都有对应关系
************************************(重点)保证不乱码关键在于文件以什么编码就以什么解码******************
①数据由内存保存到硬盘:
内存中的unicode格式二进制数字>>>编码(encode)>>>UTF-8格式的二进制
②数据由硬盘读取到内存:
硬盘中的UTF-8格式的二进制数据>>>解码(decode)>>>内存中的unicode格式
ps:python2默认ASCII码,python3默认UTF-8
******pycharm终端用的是UTF-8格式,windows终端用的是GBK格式*****
文件:
1. 什么是文件?
文件是操作系统提供给用户操作复杂硬件(硬盘)的简易的接口
2. 为什么操作文件?
人或者应用程序需要永久保存数据
3. 文件的操作使用:包括open/read/close
如:f = open(r'文件地址(路径)',encoding = 'UTF-8') # 表示先系统发送请求打开这个文件
f.read() # 表示向系统发送请求,读取文件内容
print(f.read()) # 打印f文件的内容
f.close() # 告诉系统,关闭打开的文件
快捷方式:
with open(r'文件地址(路径)',encoding = 'UTF-8') as f ,\ open(r'文件地址(路径)',encoding = 'UTF-8') as f1: # 可同时打开多个文件 斜体蓝色部分表示可以同时打开多个文件
4. 文件打开的模式及操作文件单位的方式:
模式:
① r 模式:只读模式
如:with open(r'路径',mode = 'r' , encoding = 'UTF-8') as f :
表示r模式下文件只可以读,不可以写,并且是一次性将文件内容全部读出。
print(f.readlines()) # 打印出文件中的一行行内容,返回的是一个列表(是一行行的读取,原理也是for循环,因此可解决大文件一次性读取占用内存过高的问题)
print(f.readline()) # 打印文件的一行内容
ps:在打开文件的时候,如果文件不存在,直接报错;文件路径可以写相对路径,但是该文件必须与执行文件在同一层文件下
② w模式:只写模式(慎用)
w模式下文件不可以读,只可以写。但是此模式下,当文件不存在,则自动创建该文件;当文件存在情况下,则先清空文件内容再写入。
③ a 模式:追加模式
a模式下,文件可读可写。此模式下,当文件不存在,则自动创建该文件;当文件存在情况下,不清空文件内容,文件的光标会移动到文件最后,进行内容的添加。
# mode (也可省略)参数可以不写,代表rt模式,表示只读文本文件(t不写就是默认),如:
with open(r'路径',mode = 'r',encoding = 'UTF-8') as f :
with open(r'路径', 'r',encoding = 'UTF-8') as f :
假如不是只读模式,则需要加上
b代表二进制,此情况下不能指定encoding参数,如:
with open(r'路径','rb') as f :
with open(r'路径','wb') as f :
with open(r'路径','ab') as f :