python基础--字符编码以及文件操作
字符编码:
1、运行程序的三个核心硬件:cpu、内存、硬盘
任何一个程序要是想要运算,肯定是先从硬盘加载到当前的内存中,然后cpu根据指定的指令去执行操作
2、python解释器运行一个py文件的步骤:
1、将python解释器的代码由硬盘读到内存中去
2、将py文件以普通文本的形式读到内存中去
3、python解释器读取文件的内容,识别python的语法,并执行相应的操作
ps:普通的文本编辑器和python解释器前两步都是一样的
字符编码:字符编码针对的对象是文字文件,不需要考虑视频文件、音频文件等其它文件
文本编辑器的输入和输出的过程:
1、人在操作计算机的时候输入的是人能看懂的字符,但是计算机只能识别010101这样的二进制数据,那么如果输入的是字符的话,它就会通过字符编码表自动的将内容转换成相对应的二进制数据。
编码类型:1Bytes = 8Bit
ASCII码表:
用八位二进制表示一个英文字符 所有的英文字符+符号最多也就在125位左右
GBK:
用2Bytes表示一个中文字符 1Bytes表示一个英文字符
万国码unicode:
统一用2Bytes表示所有的字符
缺点:1、浪费存储空间 2、io次数曾减,程序的运行效率将会降低(致命)
特点:
1、用户在输入的时候,无论什么字符都能够兼容万国字符
2、其它国家在编码的数据由硬盘读到内存的时候unicode与其他各个国家的编码都有对应的关系
utf-8:unicode transformation format
当内存中的unicode编码格式数据存到硬盘的是时候,会按照utf-8的编码将unicode的英文字符由原来的2Bytes变成1Bytes,并将中文字符由原来的2Bytes变成3Bytes
现在的计算机内存都是用unicode编码进行存储,但是在硬盘中的话就是通过utf-8编码进行存储的。
重点:
数据由内存保存到硬盘:内存中的unicode格式二进制数字 >>>>编码(encode)>>>>> utf-8格式的二进制数据
硬盘上的数据由硬盘读到内存:硬盘中的utf-8格式的的二进制数据 >>>>编码(decode)>>>>> 内存中的unicode格式的二进制数据
保证不乱码的重点在于文本文件以什么编码编的就必须用什么编码来解
python2:将py文件按照普通文件读入到解释器中默认使用ASCII码(因为在开发py2解释器的是时候unicode还没有盛行起来)
python3:将py文件按照文本文件读入解释器中默认使用utf-8
py3中的字符串默认就是unicode格式的二进制数
文件的文件头:# coding:utf-8
1、因为所有的编码都支持英文字符,所以文件头才能够正常生效
基于python解释器开发的软件,只要是中文,前面是都需要加一个u的,为的就是将python2(那个你不指定文件头的时候,默认使用的是ASCII来进行数据的存储,如果指定文件头,那么在运行的时候就会按照文件头的编码格式来存储数据),py3中的字符串默认就是unicode格式的二进制数
文件操作:文件是系统提供给用户操作复杂硬件(硬盘)的简易接口,人后者应用程序需要永久的保存数据
使用的方法:
with open('文件名称', '文件的读取模式', encoding='编码类型') as f: # f仅仅是一个变量名 你把它看成是一个遥控器 # 代码块用来执行对当前文件的操作
文件的读取模式:对于文件的路径可以是相对路径或者是绝对路径
r:只读模式(只能对当前文件进行读取,不能进行别的操作,如果文件不存在的话就会直接进行报错)
w:慎用只写模式(文件如果不存在的话会自动创建一个新的文件在写入内容,但是如果文件存在的话,它会先清空文件内容然后在进行写入)
a:只追加模式(文件如果不存在,会先自动创建一个新的文件,但是如果文件存在的话,他是不清空文件内容的,他会在文件的最后进行添加)
文件的常用操作方法:
readable:文件是否可读
writable:文件是否是可写的
read:一次性将文件的内容全部读出,读完一次之后,文件的光标已经在文件的末尾了,要是在读的话就没有内容了
readlines:返回的是一个列表,列表中的一个个元素对应的就是文件的一行行内容
for循环:文件是可以被for循环的,每次循环只读取一行内容(这个方法就可以解决大文件一次性读取占用内存过高的问题)
readline:只读取文件一行内容
操作文件单位的方式:
t:文本文件(t在指定的时候需要指定encoding参数,如果不指定默认使用的是操作系统默认的编码)
b:二进制(一定不能指定encoding参数)