字符编码与文件处理
---恢复内容开始---
一 了解字符编码的知识储备
一计算机的基础知识
应用程序任何操作硬件的请求都需要向操作系统发起系统调用,然后由操作系统去操作硬件。
二、文本编辑器存取文件的原(nodepad++,pycharm,word)
1、打开编辑器就打开了一个启动过程,是在内存中的,所以用编辑器编写的内容也都存放在内存中,断电后数据则会丢失。 2、要想永久保存,需要点击保存按钮:即编辑器把内存的数据刷到了硬盘上。 3、在我们编写一个py文件(没有执行),跟编写其他文件没有任何区别,都只是编写一堆字符而已。
三 python解释器执行py文件的原理,例如python test,py
第一阶段:python 解释器启动, 此时就相当于一个文本编辑器 第二阶段:python解释器相当于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读入到内存中(小复习:python的解释性只关心文件的内容,不关系文件后缀名) 第三阶段:python解释器解释执行刚刚加载到内存中test.py的代码(ps:在该阶段,即真正执行代码时才会识别python的语法,执行文件内代码,当执行到 name='egon'时,会开辟内存空间存放字符串‘egon’)
四 总结python解释器与文件本编辑的异同
相同点:python解释器是解释执行文件内容的,因为python解释器具备读py文件的功能,这一点与文本编辑器一样
不同点:文本编辑器将文件内容读入内存后,是为了显示或编辑,根本不会去理会python的语法,而python解释器将文件内容读入内存后,是会执行python的代码 识别python的语法。
二:字符编码介绍
一:什么是字符编码
我们都知道计算机的语言是数字(二进制),而我们平时使用计算机时,用的都是人类能读懂的字符(用高级语言编程的结果无非是在文件内写了一堆字符)若想要计算机读懂人类的字符必须要经过一个过程: 字符-------(翻译过程)--------数字 这个过程十几就是一个字符如何对应一个特定数字的标准, 这个标准即称之为字符编码
二:字符编码的发展
分为三个阶段
一阶段是,以英文为基础的ASCII表
第二阶段是为了满足英文和中文, 制定了gbk字符编码表
第三阶段, 为了避免多语言文本中出现冲突, 应运而生了万国符编码表,unicode,其中英文字符占用2个字节, 占用的存储空间比较大, 所以现在又有了优化版的 简称UTF-8
但是目前是属于过度阶段, 还是以Unicode为标准。
三、字符编码的总结
第一点:保证不乱码的核心,法则就是 字符按照什么标准而编码的就要按照上面标准标准解码, 此处的标准就是值得字符编码。
第二点:在内存中写的所有的字符, 一视同仁, 都是unicode编码,然后由unicode转换成其他编码格式。
Unicode---->>编码encode --->utf-8
utf-8------>> 解码 decode ---->> unicode
四 文件头
文件头的格式是 #coding:后面加字符编码 例如:#coding:utf-8. 它的作用是告诉python解释器, 用指定的字符编码
三 、文件处理
一,介绍。
计算机系统分为:计算机硬件, 操作系统, 应用程序三部分
我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。
有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程:
1:打开文件, 得到文件句柄并赋值给一个变量 2:通过句柄对文件进行操作 3:关闭文件
二,在python中
1:打开文件,得到文件句柄并赋值给一个变量 f=open('a.txt','r',encoding='utf-8'#默认打开模式为r(只读) 若没有为open指定编码, 那么操作系统则默认自己的编码取打开文件,windows下是gbk,linux下是utf-8.
这就用到了上节课讲的字符编码的知识:若要保证不乱码,文件以什么方式存的,就要以什么方式打开。
2:通过句柄对文件进行操作, date=f.read() 3:关闭文件 f.close()
但是很多同学还是会忘记f.close(),对于这些不长脑子的同学,我们推荐傻瓜式操作方式:使用with关键字来帮我们管理上下文 with open('a.txt','w') as f: pass with open('a.txt','r') as read_f,open('b.txt','w') as write_f: data=read_f.read() write_f.write(data)
三,文件默认的打开模式是t模式:文本模式
操作文件的模式有三种模式: r:只读 ,w:只写并清空原文件 a:在原文件的最后可以继续写文件
1:r:只读,readline:只读一行
f=open('a.txt',mode='r',encoding='utf-8') print(f.read()) #打印结果则是读取a文本文件中的数据 f.close() #切记要关掉操作系统中的文件, 否则下次无法从新读取
f=open('a.txt',mode='r',encoding='utf-8')
print(f.readline(),end='')
print(f.readline(),end='')
print(f.readline(),end='') #print()有自动换行的作用, 若不添加的end=''的话,则会空空两行
print(f.readline(),end='')
f.close()
或者不加f.close()用 以下表达
with open('a.txt',encoding='utf-8') as f:
for line in f:
print(line,end='')
2:w:只写 f.write() 或者f.writelines() 只写 文件过大时要使用 with as f 的形式
f=open('a.txt',mode='r',encoding='utf-8') print(f.read()) f.close()
f=open('a.txt',mode='r',encoding='utf-8') #mode='rt'
print(f.readlines())
f.close() 循环文件不要用该方式, 否则文件过大的情况下有可能会撑爆内存
with open('a.txt',encoding='utf-8') as f:
for line in f:
print(line,end='')
注意 : 只写模式
当文件存在时,清空, 当文件不存在时,创建空文档
3 a:模式是只追加写模式
注意当文件不存在时,创建空文件
当文件存在时,光标直接跑到文件末尾
f=open('a1.txt',mode='a',encoding='utf-8')
---恢复内容结束---