python 文件的打开关闭

文件的打开与关闭

文本文件和二进制文件
文件可以看成是存储在辅助存储器上的数据序列,可以包含任何数据内容。文件包括两种形式:文本文件和二进制文件。文本文件一般由特定编码的字符组成,二进制文件由比特0和比特1组成,没有统一的字符编码,数据的组织形式与文件用途有关。

文本文件和二进制文件的根本区别是是否有统一的字符编码,二进制文件由于没有统一的字符编码只能被当作字节流,不能被看做字符串。
但是无论是二进制文件还是文本文件都可以用“文本文件方式”和“二进制文件方式”打开。
首先我们创建了一个名为"pyDemo1"的文本文件,陷在以不同方式打开它:

demo1=open("D:\python\pyDemo1.txt",'rt',encoding='UTF-8')
print("文件的文本形式打开方式内容是:{}".format(demo1.readline()))
demo1.close()
demo2=open("D:\python\pyDemo1.txt",'rb')
print("文件的二进制打开方式内容是:{}".format(demo2.readline()))
demo2.close()

结果是:
在这里插入图片描述
这个例子告诉我们无论是二进制文件还是文本文件都可以用二进制方式和文本文件方式打开。
什么?怎样打开文件?用open函数呀!什么?open函数的参数都是什么意思呀?别急嘛,这不就来了吗(•̅灬•̅ )


文件的打开和关闭
python对于文件都采用默认的操作步骤:打开——操作——关闭,对文件进行操作之后一定要关闭它,关闭文件将对文件释放控制权使文件恢复存储状态,此时另一个进程可以操作这个文件。
python通过open()函数打开一个文件,语法如下:
变量名=open(文件名,打开模式)
open函数
其中open函数有多个参数,其完整参数形式如下:
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True,opener=None)
file:表示文件路径
mode: 文件打开模式。
buffering: 设置缓冲(不影响结果)。
encoding: 解码或编码文件的编码的名称,仅适用于文本文件。
errors: 指明编码和解码错误时怎么样处理,适用于文本模式。
newline: 文本模式之下,控制一行的结束字符。
closefd: 传入的file参数类型。
opener: 自定义打开文件方式(使用默认None)
别看open有很多参数,其实我们最常用的参数只有file,mode和encoding

下面为大家解读一下这几个参数:
①file:
文件路径分为绝对路径和相对路径,绝对路径就是文件的绝对位置,具体到哪个盘的哪个文件夹下面层层定位;相对路径就是当前py文件夹的路径,以当前py所在文件夹为基准开始寻找文件
②mode:
打开文件的模式:
❶’r’:只读模式,如果文件不存在,返回异常FileNotFoundError,默认值
❷’w’:覆盖写模式,文件不存在则创建,存在则完全覆盖
❸’x’:创建写模式,文件不存在则创建,存在则返回异常FileExistsError
❹’a’:追加写模式,文件不存在则创建,存在则在文件最后追加内容
❺’b’:二进制文件模式
❻’t’:文本文件模式,默认值
❼’+’:与r/w/x/a一同使用,在原功能基础上增加同时读写功能
具体组合可以看下面这张图(在百度经验上找的(☉౪⊙))

在这里插入图片描述

③encoding:
返回的数据以什么编码形式,常用的就是UTF-8和gbk,适用于文本文件
④buffering:
用来表示缓冲区存盘的方式。缓冲区是内存上的一个空间,当达到缓冲区满了之后,数据才会刷到磁盘。
buffering为-1时,使用默认大小的缓冲区。
buffering为0时,关闭缓冲区,直接读写,仅在二进制模式下有效。
buffering为1时,表示在文本模式下使用行缓冲区方式。即见到换行符就刷新存盘。
buffering为大于1时,表示缓冲区用于指定缓冲区的大小。⑤⑥⑦

⑤errors:
是用来指定编码和解码错误时处理方法。适用于 t (文本模式)。
errors=strict,编码出错则抛出异常ValueError。同等于默认errors=None;
errors=ignore,忽略错误。
errors=replace,替代模式,比如使用“?’来替换出错的地方。


由于书上的open函数只有两个参数file和mode我写例子的时候出现了异常,看书也找不大答案就去搜了一下发现open函数还有好多参数,没有设置正确的编码导致出现异常,所以我就把这些参数都整理下来让你们看了(◕ܫ◕),(这些参数参照自百度经验哦)
我一开始只设置了两个参数然后运行程序出现了异常
看到了Unicode猜想应该是编码类的错误,果然还有好几个参数没有设置

	UnicodeDecodeError: 'gbk' codec can't decode byte 0x92 in position 0: incomplete multibyte sequence
demo1=open("D:\python\pyDemo1.txt",'rt')
print("文件的文本形式打开方式内容是:{}".format(demo1.readline()))
demo1.close()
demo2=open("D:\python\pyDemo1.txt",'rb')
print("文件的二进制打开方式内容是:{}".format(demo2.readline()))
demo2.close()

设置完encoding参数之后

demo1=open("D:\python\pyDemo1.txt",'rt',encoding='UTF-8')
print("文件的文本形式打开方式内容是:{}".format(demo1.readline()))
demo1.close()
demo2=open("D:\python\pyDemo1.txt",'rb')
print("文件的二进制打开方式内容是:{}".format(demo2.readline()))
demo2.close()

结果正确啦
在这里插入图片描述
随后好奇去试了一下errors参数

demo1=open("D:\python\pyDemo1.txt",'rt',errors="ignore")
print("文件的文本形式打开方式内容是:{}".format(demo1.readline()))
demo1.close()
demo2=open("D:\python\pyDemo1.txt",'rb')
print("文件的二进制打开方式内容是:{}".format(demo2.readline()))
demo2.close()

结果是:
在这里插入图片描述
由于使用了errors选择忽略错误,因此程序就是一堆乱码了(*ˉ﹃ˉ)

close()函数
现在我们已经成功打开了文件了,操作完成后需要把文件关闭,可以让其他程序继续使用文件,关闭文件只需使用close函数即可,没有打开的花里胡哨,也没有打开可能会面临的种种错误,简单粗暴,一关就好,面对close函数的种种优点你还有什么理由不去关闭呢?
变量名.close()
即可关闭文件ლ(´ڡ`ლ)

你今天学废了吗,下次再见咯
(`・ω・´)

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值