80文件操作——创建和打开文件

1、文件操作的步骤

想一想:
如果想用word编写一份简历,应该有哪些流程呢?

  • 打开word软件,新建一个word文件
  • 写入个人简历信息
  • 保存文件
  • 关闭word软件

同样,操作文件的整体过程与使用word编写一份简历的过程是很相似的

  • 打开文件,或者新建立一个文件
  • 读/写数据
  • 关闭文件

2、打开文件

打开或新建文件

Python中,想要操作文件需要先创建或者打开指定的文件并创建文件对象,可以通过内置的open()函数实现。open()函数的基本语法格式如下:

file = open(filename[,mode[,buffering]])

参数说明:

  • file:被创建的文件对象。
  • filename:要创建或打开文件的文件名称,需要使用单引号或双引号括起来。如果要打开的文件和当前文件在同一个目录下,那么直接写文件名即可,否则需要指定完整路径。例如,要打开当前路径下的名称为status.txt的文件,可以使用“status.txt”。
  • mode:可选参数,用于指定文件的打开模式,其参数值如表1所示。默认的打开模式为只读(即r)。
  • buffering:可选参数,用于指定读写文件的缓冲模式,值为0表示不缓存;值为1表示缓存;如果大于1,则表示缓冲区的大小。默认为缓存模式。

访问模式

在这里插入图片描述
在这里插入图片描述
rbwbab:一般对二进制文件进行操作。

文本文件和二进制文件

文本文件:编辑器可以编辑的任何文件,例如txt文件、py文件。

二进制文件:例如图片、音频、视频等。

文件都是以二进制形式保存在硬盘中的。

使用Open()方法打开一个不存在的文件时先创建该文件

在默认的情况下,使用open()函数打开一个不存在的文件,会抛出如图1所示的异常。
在这里插入图片描述
图1 打开的文件不存在时抛出的异常

要解决如图1所示的错误,主要有以下两种方法:
在当前目录下(即与执行的文件相同的目录)创建一个名称为status.txt的文件。
在调用open()函数时,指定mode的参数值为ww+aa+。这样,当要打开的文件不存在时,就可以创建新的文件了。

f1 = open('test.txt','w')

新创建的文件没有任何内容,大小为0KB。这是因为现在只是创建了一个文件,还没有向文件中写入任何内容。

使用Open()方法以二进制形式打开文件

使用open()函数不仅可以以文本的形式打开文本文件,而且还可以以二进制形式打开非文本文件,如图片文件、音频文件、视频文件等。例如,创建一个名称为picture.png的图片文件(如图2所示),并且应用open()函数以二进制方式打开该文件。
在这里插入图片描述
图2 打开的图片文件
以二进制方式打开该文件,并输出创建的对象的代码如下:

file = open('picture.png','rb')       # 以二进制方式打开图片文件
print(file)                             # 输出创建的对象

执行上面的代码后,将显示如图3所示的运行结果。
在这里插入图片描述
图3 以二进制方式打开图片文件

从图3中可以看出,创建的是一个BufferedReader对象。对于该对象生成后,可以再应用其他的第三方模块进行处理。例如,上面的BufferedReader对象是通过打开图片文件实现的。那么就可以将其传入到第三方的图像处理库PILImage模块的open方法中,以便于对图片进行处理(如调整大小等)。

使用Open()方法打开文件时指定编码方式

在使用open()函数打开文件时,默认采用GBK编码,当被打开的文件不是GBK编码时,将抛出如图4所示的异常。
在这里插入图片描述
图4 抛出Unicode解码异常
解决该问题的方法有两种,一种是直接修改文件的编码,另一种是在打开文件时,直接指定使用的编码方式。推荐采用后一种方法。下面重点介绍如何在打开文件时指定编码方式。

在调用open()函数时,通过添加encoding='utf-8'参数即可实现将编码指定为UTF-8。如果想要指定其他编码,可以将单引号中的内容替换为想要指定的编码即可。

例如,打开采用UTF-8编码保存的notice.txt文件,可以使用下面的代码:

file = open('notice.txt','r',encoding='utf-8')
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值