Python“文件操作”略知
大家好,今天我们继续聊聊Python中的文件操作。 有一首诗,艾青的“我爱这土地”,我们在上学的时候都学过吧,我记得当时老师是要求全文背诵的,时隔这么久,多多少少忘了些,不过有一句却记忆犹新,“为什么我的眼里常含泪水?因为我对这土地爱得深沉 ”。今天我们就用Python试着读一下这首诗,让Python也学习一下我们中华儿女的家国情怀。

还是照旧,先用open方法打开文件,再用read方法读取文件。

这,这不是我们想要的结果啊,一股脑的全打印出来了,把诗的美感全破坏了,别急,我们找找Python文档,看有没有办法解决。

诶,这个可以,readline,从英文名字看就知道是读一行,OK,我们试一下。

倒是一行一行读出来了,可是每读一行,都要执行一下readline方法,还是不方便,再找找看,有没有更好的方法。

readlines,就是多好多行嘛,参数是需要读取的行数,我们试一下。

看,已经把所有文件存储到一个列表中了,怎么打印出来呢?大家先回忆一下,提示用for/in语句,OK,看看和我写的一样不一样。

简直不能再完美了,哎呀,刚刚手一抖,又敲了一行readline,输出结果如下图所示。

看到这儿,我陷入了沉思。诶,这Python真是聪明啊,它居然知道我读完了,就啥也不给输出了,可问题是假如我还想从头或从某个位置再读一遍文件该怎么办?于是冥思苦读,终于在文档中找到了下面三个方法。

先做一下简单解释,我们通过open方法打开文件,返回值是一个TextIOWrapper对象,这个大家可以用help语句看一下。

这个对象代表什么呢,百度翻译上给的解释是文件扫描器,虽然不算准确,不过倒也符合中国人的思维习惯,大家可以按这个来理解,执行完open方法后,文件内容被一个挨一个地“扫描”进这个对象中,就好像是文件流(类比于水流,大家可以想象一下),而且还有一个指针一直指着文件流的当前位置,我们把这个指针称作“文件流指针”。
讲解到这儿,就可以继续介绍上面的三个方法了,seek方法用于根据偏差值offset更改流的位置;seekable用于判断该对象是否支持随机访问,如果不支持seek、tell等方法都是不能用的,所以保险起见,应先执行一下seekable方法;tell方法用于返回文件流的当前位置,其实也就是“文件流指针”的值,👌,分析完毕,我们代码中操作看看。

我们简单解释一下上述代码,首先通过执行seekable方法确认该对象支持随机访问,然后通过调用tell方法获取当前的“文件流指针”值,接下来通过执行seek方法使得 “文件流指针”重新指向文件开头,最后通过调用readline方法输出一行文本,由此也证明了seek方法的有效性。
writeline方法和readline方法类似,大家可以自己尝试着学习一下,就当是作业了。
OK,今天的Python“文件操作”学习就到这儿,不过不要以为“文件操作”这块内容已经结束了哈,其实还远远没有呢,就像题目中说的那样,我们仅仅是做到了略知。