阅读源码可以看出除了file参数其他参数都为缺省,其中mode是一个可选字符串,指定文件打开模式。它默认为“r”,这意味着文本阅模式。其他参数没有去深究,暂时没有用到。我们常用用的就是"file"、"mode"参数,file为文件路径这个不多讲,重点说一下mode,因为笔者刚开始学习python对with open()文件 *** 作一知半解,百度很多次没有找到自己想要的解决方案,于是去阅读python源码。
以上的mode参数都是可以自由组合,这一点在源码的描述中有
再此记录一下如果使用pickle.dump()模块序列化对象时候,with open()中的mode的参数一定要使用含 b 的组合模式,使用二进制模式 *** 作文本写入。如不使用二进制写入则会报出一下错误。
20181122 qzd
这样直接打开文件,如果出现异常(如,读取文件过程中文件不存在),则直接出现错误,close命令无法执行,文件无法关闭。
好处: 用with语句的好处就是到达语句末尾时会自动关闭文件,即使出现异常。
with语句实际上是一个非常通用的结构,允许你使用所谓的上下文管理器。上下文管理器是支持两个方法的对象:_ enter_ 和 _ exit_ 。
方法_ enter_ 不接受任何参数,在进入with语句时被调用,其返回值被赋给关键字as后面的变量。
方法_ exit_ 接受三个参数:异常类型、异常对象和异常跟踪。它在离开方法时被调用(通过前述参数将引发的异常提供给它)。如果_ exit_ 返回False,将抑制所有的异常。
文件也可用作上下文管理器。它们的方法_ enter_ 返回文件对象本身,而方法_ exit_ 关闭文件。
with语句作用效果相当于上面的try-except-finally
我们之前使用open方法读取文件
细心的朋友应该注意到,我们用open()打开文件以后,后面会跟着一个f.close()方法用来关闭文件,但是每次这么写,会很麻烦。
所以,我们接下来介绍一下with open()的用法
调用read()方法,会一次性读取全部文件内容,当文件内容较小时比较试用,但是当文件内容过大,很容易导致运行内存100%,所以我们可以反复调用read(size)来设置每次读取的字节内容。
写入文件内容时:
我们写入文件内容时,系统并不会立刻就把所有数据写入到磁盘,它是先放到内存中缓存,等到空闲的时候再慢慢写入到磁盘。
当调用close()方法时,系统才能保证把剩余没有写入的数据全部写入到磁盘。假如我们忘记调用了close()方法,那很可能导致我们的数据遗失。
为了保证万无一失,最好是使用with open()进行内容的读写。
try...finally
我在之前的文章里面讲过try...finally,finally里面的内容是不管是否发生异常都会被执行。
所以,对于open()方法我们有另一种写法:
但是呢,这种方法相比with open()实在是太麻烦了,所以我们只是简单说一下,并不建议大家去使用这个方法。
多个文件的读写方式
with open()和open()读写文件的方法是通用的,没有区别
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)