字符编码与文件处理

---恢复内容开始---

一 了解字符编码的知识储备

一计算机的基础知识

应用程序任何操作硬件的请求都需要向操作系统发起系统调用,然后由操作系统去操作硬件。

 

二、文本编辑器存取文件的原(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')

---恢复内容结束---

原文地址:https://www.cnblogs.com/lx3822/p/8625737.html