讲解编程
语言:Python
文件
打开方式:Open()
准备工作 1.首先,先知道一下open这个函数的作用。open这个函数打开文件之后 并没有 读文件,只是告诉我们: ①这个文件现在面向你开放,你可以在你的程序中调用了 ②我把这个文件给了个代号叫file(句柄) 2.其次,这篇文章的结论来源于作者在程序运行的每个关键节点都测试了当前文件指针的位置,最终一一进行的总结发现的规律。 文件指针位置的查看函数是file.tell()方法—— 这一点很重要,你需要知道,以便于有需要的话自己去验证。 正式讲解!
综上,其实理解python文件读写的关键就在于发现该操作背后真正遵循的逻辑, 依次操作的顺序。这一点当你知道之后你或许会觉得原来这么简单,但如果不理解这一点的话,单想从各种表面上看似毫无规律的结果中总结规律将会非常难(反正我从本科学c语言开始就尝试了很多次,然而失败了)。 有的时候不理解和理解之间就差那么一句话而已,而找到这句话却需要你进行精细的思考和大量的努力。所以—— 我把刚刚总结出来、新鲜出炉的python文件读写核心机密都告诉你了,你还不赶快给我点个赞或者在看 !? 最后总结一下,其实理解python文件读写就需要记住两句话: ①‘字母+’的理解和执行方式都是按照顺序依次进行,即先字母,后+。 ②根据字母的操作确定当前文档的状态(是否打开即清空)以及指针的位置(这是最关键的一点!)。文件的读写都是从指针位置出发。
核心讲解要点 :Open中的读写模式数'r'、'w'、'a'、'x'及'r+'、'w+'、'a+'的区别!
为什么要专门写一篇文章讲呢,因为我发现这几个参数远远没有其字面意思写得那么简单。例如,w+说好了是可读可写,但在帮课题组改一个社会网络分析的数据的时候,当我用w+方式打开一个文件之后,我发现我读入不了任何东西···我再打开文件一看:文件空了!(还好老子用的是副本···) 可这是为啥?! 用a+读文件,.readlines()方法,结果发现在一开始就读不进来任何东西(这回我的原文件没删)。 这又是为啥? 反复实验加上查找网上的讲解让我对这些内容越来越乱。我就觉得这个东西真的好奇怪,明明说好了加一个+号就增加了一个读的功能,怎么还是读不进来?难道这里的加号其实并没有增加读的功能,只是一个形同虚设的东西? 其实,更深刻的理解没有那么简单。 这篇文章里,我会力求使用最简洁的语言,以一个总原则为主,“指针”为辅,把文件操作中所有让人迷惑的内容串起来,让你在写下open代码之后就能立刻自己反应出来每种指令会产生的结果及原理。保你看完豁然开朗,忍不住为我拍手点赞 话不多说,我们开始吧!准备工作 1.首先,先知道一下open这个函数的作用。open这个函数打开文件之后 并没有 读文件,只是告诉我们: ①这个文件现在面向你开放,你可以在你的程序中调用了 ②我把这个文件给了个代号叫file(句柄) 2.其次,这篇文章的结论来源于作者在程序运行的每个关键节点都测试了当前文件指针的位置,最终一一进行的总结发现的规律。 文件指针位置的查看函数是file.tell()方法—— 这一点很重要,你需要知道,以便于有需要的话自己去验证。 正式讲解!
1.x的含义太好理解了,这里不多说。x可以记为“新”,就是新建一个文件(并写)的意思。
2.所有不带加号的字母其实都特别好理解,字面意思。
①r的话就是单纯表示这个文件可读,但是还没读的时候,文件指针在开头 ②w的话一旦打开这个文件,即使你不开始读,文件也会被清空,等待被写入(而不是等写的时候才开始清空)。既然已经清空,of course指针在开头(你后面都没东西呀!)
③a打开文件后,比较特殊,因为是要准备好追加写,因此会在打开的一瞬间将指针放到文件的最后(使得你一打开就能往后写)。
但是,但是!w和a与r的核心区别在于可不可读,如果可读的话,文件中的数据是可以被我们利用的,相当于是盖在文件上的那层布被拿掉了。而如果不可读的话,我们是没法知道文件里有啥的,只能无脑往里写,而且我们也没法通过python看到写的效果,只能鼠标打开文件单独看。
3.带加号的!重点!
带加号的情况,不同的情况结果不同,网上有很多讲解,但是都没有一个通性规律的总结。我在这里告诉大家python读文件的核心操作规则,这一定比你在网上看到的其他讲解都要凝练和简单,一定会让你更加一目了然,而且我认为这也是这篇文章最有含金量、也是我最引以为豪的点。(说来也简单,)那就是:
Python会先进行字母对应的操作,再执行+对应的操作! 也就是说,“字母+”的组合的正确解读方法是拆开来看,而不是合起来然后苦思冥想它最后的输出状态! 怎么样?恍然大悟?听君一席话,胜读十年书? 真可谓难者不会,会者不难 有了这条规则,再加上对文件指针的基本理解之后,你就可以准确无误地预判文件读写操作的结果和指针的位置,并且你会发现原本看来毫无规律的结果变得更加一目了然,网上那些不清晰的解释也都清晰了起来! 具体来看: a+:先执行a的操作,即指针放到文件末尾,再执行+的操作,即把文件的幕布打开,现在文件内容对我们可“见”了,我们可以调用了。但是这个时候如果你读入的话,你会读入nothing。因为啥?因为你的文件指针在最后面! w+:先执行w的操作,即——清空这个文档(这个一定要记住,一旦使用此法原有数据将会消失殆尽,如无存档后果不堪设想,把你毕业论文数据搞没了你后悔都来不及 !!!我刚刚就差一点,吓我一跳,还好我有副稿),然后再使文档可读。因此,可以想到,如果此时立刻读入,会读入一个空列表,即nothing!但如果你写一些东西,再把指针掉回头去读,那就能读出东西了!所以也有一些人说w+是“写读”模式,即先写才能读。 r+:先使得文件可读,这时指针在开头。再+,即此时可以写了。但是是可以从开头写!因此如果你不改变指针位置直接写的话,是直接从起始点开始写入的。那这个时候可能就有人要问了,“老师,那写入的内容是不是会把后面的字挤开呢?”——经过实验之后我可以很自信地告诉你,No! (还是原先那串代码,看看结果当中文件头都被我覆盖成啥样了 ) 由此,我发现了python的写入操作的另一条重要规则: 指针所在位置如果原先有字,那么当你写入时,原先那个字就会直接被覆盖掉(而不会保留、后挪)。 而x+的作用,我猜除了新创建一个文件之外,其他和w+就一样了。可以说x+相当于换了个地方的w+。(这个我觉得太简单了,也没啥用,就没有验证,同学们感兴趣的话可以去验证一下。)综上,其实理解python文件读写的关键就在于发现该操作背后真正遵循的逻辑, 依次操作的顺序。这一点当你知道之后你或许会觉得原来这么简单,但如果不理解这一点的话,单想从各种表面上看似毫无规律的结果中总结规律将会非常难(反正我从本科学c语言开始就尝试了很多次,然而失败了)。 有的时候不理解和理解之间就差那么一句话而已,而找到这句话却需要你进行精细的思考和大量的努力。所以—— 我把刚刚总结出来、新鲜出炉的python文件读写核心机密都告诉你了,你还不赶快给我点个赞或者在看 !? 最后总结一下,其实理解python文件读写就需要记住两句话: ①‘字母+’的理解和执行方式都是按照顺序依次进行,即先字母,后+。 ②根据字母的操作确定当前文档的状态(是否打开即清空)以及指针的位置(这是最关键的一点!)。文件的读写都是从指针位置出发。