Python自学28——第十四章(1):文件的编码格式,文件的读写操作和原理,常用文件的打开模式,文件对象的常用方法

目录

一、编码格式

二、文件的读写

1、文件读写的原理

2、文件读写的操作

三、常用的文件打开模式

1、文件类型

2、文件的打开模式汇总

四、文件对象的常用方法


一、编码格式

常见的字符编码格式比如Python解释器使用的是Uincode(内存),.py文件在磁盘上使用UTF-8存储(外存)。

.py由于默认是使用UTF-8来存储数据,那么假如我不想使用UTF-8存储了,怎么处理呢?

那就是在.py的最上面加上一句encoding=………(你想要的编码格式)即可。不同的编码格式决定了占用磁盘空间的大小。

二、文件的读写

1、文件读写的原理

文件的读写俗称“IO操作”,其流程如下图所示:

.py文件由解释器执行,然后调用OS操作系统去操作硬盘上的文件(对此文件进行读写操作)。进行读写操作的过程是:首先打开或新建文件,然后对文件进行读写操作,数据从外界往内存里面进的操作称为读操作,反之,内存往外界输出数据称为写操作。操作完成后关闭资源(关闭操作系统的资源)。

IO操作的原理就是队列的原理——先进先出。下图数据如管道一样,先进来的数据先输出出去,插不了队。

2、文件读写的操作

 

Mode是r表示是读操作,mode是w表示是写操作。

(1)读操作

我之前在chap14的文件夹里面新建了一个txt文件,文件命名为a,里面的内容是“中国”二字。现在我要在一个.py文件里面读它。

于是我要先打开文件:file=open('a.txt','r',)
然后输出文件里面的东西:print(file.readlines())
最后关闭文件:file.close()

运行后发现出现了这样的一个问题:UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 2: illegal multibyte sequence

这个问题翻译过来是:“GBK”编解码器无法解码位置2的字节0 xad:非法多字节序列。

后来我查询博客,得知错误原因在于:encoding默认的不是读取中文字符的,需要重新定义为能识别中文字符的。

因此解决方法就是:open中多加一个参数:encoding = “UTF-8”

如图所示便可以成功输出了。

(2)写操作

 

写操作的大致步骤如上图所示。以写模式打开文件时,如果文件不存在则创建文件,若文件存在则覆盖其原有的内容,文件格式在文件的开头。

经过这样的操作后,我们可以发现b确实被顺利的创建出来了,然后里面的内容也是我输入的东西。

 

三、常用的文件打开模式

1、文件类型

2、文件的打开模式汇总

读写操作上面说了,这里不说了。

(1)追加模式a

当我把模式改成a,也就是改成追加模式时,我再运行一下程序,会发现:

里面有两组输出的东西。

因此追加模式的作用就是重复进行写操作。可以进行无数次。

(2)二进制模式b

上图是使用此模式进行对图片的复制操作。

复制完成。

(3)读写模式+

这个模式不能单独使用。

四、文件对象的常用方法

1、read()

直接这样的话是读取文件中的所有内容,而如果给read的括号里面加上个数字2,则会读取文件的前两个字符。

2、readline()

从文本中读取一行的数据。

3、readlines()

输出每一行的内容,并把每一行都存入一个列表当中。

4、write()

普通操作见“二”

我们还可以把列表元素给写入到文本中去。具体操作见下图:

我们能看到列表确实被写入了进去:

5、seek()

Seek操作是改变文件指针的位置,如下图所示的实例:

由于汉字占两个字节,因此第六行的seek括号里写的2,因此输出会跳过中,从国开始输出。如果seek括号里面写的是1的话就会报错,因为汉字不能分一半输出。

6、tell()

使用这个方法的话会输出指针当前的位置。

上图所示的程序是跳过前两个字母然后进行读操作,最后返回指针所在位置。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wo~he!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值