今日学习内容,字符编码。python
首先复习一下运行文件的基本操做:windows
计算机的三个核心组件:CPU、内存、硬盘。网络
任何一个程序要想运算,必选先有硬盘加载到内存,而后cpu去内存取指执行,运行着的应用程序产生的数据,必先存在内存。编辑器
而后是回顾了python解释器运行一个py文件(如xxx.py)的步骤:学习
一、将python解释器的代码由硬盘读到内存。编码
二、将xxx.py以普通文本文件形式读到内存。spa
三、python读取文件内容,识别python语法,执行相应的操做。操作系统
(普通的文本编辑器与python解释器的前两步是同样的)code
今天学习的新内容是字符编码,字符编码针对文字,字符编码只跟文本文件有关。blog
人在操做计算机的时候输入的是人可以看懂的字符,可是计算机只能识别0101010这样的二进制数据。输入的流程是输入字符>>>字符编码表(字符编码表就是字符与数字的对应关系)>>>二进制数字。
第一个阶段
计算机由美国人发明,因此最先的字符编码为ASCII。
第二个阶段
中国规定的GBK编码。
日本人规定的Shift_JIS编码。
韩国人规定的Euc-kr编码。
第三个阶段
unicode万国码(能包括全世界的语言)。
为了能够节省unicode耗费空间的UTF-8编码。
结果:内存中统一采用unicode,浪费空间换区能够转换成任意编码(乱码),硬盘采用utf-8,保证存放于硬盘或者基于网络传输的数据量很小,提升传输效率与稳定性。
unicode的两个特色
1.用户在输入的时候,不管输什么字符都可以兼容万国字符
2.其余国家编码的数据由硬盘读到内存的时候unicode与其余各个国家的编码都有对应关系
存取过程当中的数据变换:
数据由内存保存到硬盘
1.内存中的unicode格式二进制数字 >>>>编码(encode)>>>>> utf-8格式的二进制数据
硬盘中的数据由硬盘读到内存
1.硬盘中的utf-8格式的二进制数据 >>>>>解码(decode)>>>>> 内存中unicode格式的二进制数据
乱码:字符不可以正常显示 (编码不一致)
保证不乱吗的关键在于文本文件以什么编码就用什么解码。
python2
将py文件按照文本文件读入解释器中默认使用ASCII码(由于在开发python2解释器的unicode尚未盛行)
python3
将py文件按照文本文件读入解释器中默认使用utf-8
基于Python解释器开发的软件,只要是中文,前面都须要加一个u
在python2中,当你不指定文件头的时候,默认用ASCII存储数据,若是指定文件头那么就按照文件头的编码格式存储数据。python3中字符串默认就是unicode编码格式的二进制数。
补充点:1.pycharm终端用的是utf-8格式。2.windows终端采用的是gbk。
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 # 每一个Bytes真正的有效位数是7位,而首位是一个标志位。
什么是文件?操做系统提供给用户操做复杂硬件(硬盘)的简易接口。
为何要操做文件?人或者应用程序须要永久的保存数据。
怎么使用?
#1. 向操做系统发送请求,打开某个文件(应用程序要想操做计算机硬件 必须经过操做系统来简介的操做) f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r #2. 向操做系统发请求 读取文件内容 f.read() #3. 告诉操做系统 关闭打开的文件 f.close()
with open(r'D:\Python项目\day07\a.txt',encoding='utf-8') as f ,\
能够自动帮你调用f.close()
r 只读模式
w 只写模式
a 追加写模式
print(f.readable()) # 是否可读 print(f.writable()) # 是否可写 print(f.read()) # 一次性将文件内容所有读出
补充:文件路径能够写相对路径,可是须要注意该文件必须与执行文件在同一层文件下。
with open(r'a.txt',mode='r',encoding='utf-8') as f: mode关键字能够不写 print(">>>1:") print(f.read()) # 一次性将文件内容所有读出 print('>>>2:') print(f.read()) # 读完一次以后 文件的光标已经在文件末尾了,再读就没有内容了可读 print(f.readlines()) # 返回的是一个列表 列表中的一个个元素对应的就是文件的一行行内容,内部至关于一个for循环。 print(f.readline()) # 只读取文件一行内容
with open(r'xxx.txt',mode='w',encoding='utf-8') as f: # 当文件xxx.txt不存在时,会生成一个该文件。 print(f.readable()) # 是否可读 print(f.writable()) # 是否可写 f.write('不不不,你没有翻~\n') # write是用来写入内容的,\n是用来换行的。 l = ['不sdffs,sdfs有翻~\n','不sdfsdf不,你sdfsf翻~\n','不sfad不,你没sa翻~\n'] f.writelines(l) # writeliens的做用是,写入列表l中的全部内容,内部原理也是一个for循环
with open(r'yyy.txt',mode='a',encoding='utf-8') as f: f.write('我是小尾巴\n')
操做文件单位的方式
t 文本文件 t在使用的时候须要指定encoding参数 若是不知道默认是操做系统的默认编码
b 二进制 必定不能指定encoding参数