python学习之旅笔记总结:第十一章、文件

      到目前为止,我们使用的主要是解释器自带的数据结构,程序与外部的交互很少,且都是通过input和print进行的。本章将更进一步,让程序能够与更大的外部世界交互:文件和流

1 打开文件

         要打开文件,可使用函数open,它位于自动导入的模块io中。函数open将文件名作为唯一必不可少的参数,并返回一个文件对象。如果当前目录中有一个名为somefile.txt的文本文件(可能是使用文本编辑器创建的),则可像下面这样打开它:       

                            

           如果要通过写入文本来创建文件,这种调用函数open的方式并不能满足需求。为解决这种问题,可使用函数open的第二个参数

          调用函数open时,如果只指定文件名,将获得一个可读取的文件对象。如果要写入文件,必须通过指定模式来显式地指出这一点。函数open的参数mode的可能取值有多个,表11-1对此进行了总结

         

         

          显式地指定读取模式的效果与根本不指定模式相同。写入模式让你能够写入文件,并在文件不存在时创建它。独占写入模式更进一步,在文件已存在时引发FileExistsError异常。在写入模式下打开文件时,既有内容将被删除(截断),并从文件开头处开始写入;如果要在既有文件末尾继续写入,可使用附加模式

         '+'可与其他任何模式结合起来使用,表示既可读取也可写入。例如,要打开一个文本文件进行读写,可使用'r+'。请意,'r+'和'w+'之间有个重要差别:后者截断文件,而前者不会这样做

          默认模式为'rt',这意味着将把文件视为经过编码的Unicode文本,因此将自动执行解码和编码,且默认使用UTF-8编码。要指定其他编码和Unicode错误处理策略,可使用关键字参数encoding和errors。

2 文件的基本方法

                知道如何打开文件后,下一步是使用它们来做些有用的事情。本节介绍文件对象的一些基本方法以及其他类似于文件的对象(有时称为流)                                    

2.1 读取和写入

               文件最重要的功能是提供和接收数据。如果有一个名为f的类似于文件的对象,可使用f.write来写入数据,还可使用f.read来读取数据。与Python的其他大多数功能一样,在哪些东西可用作数据方面,也存在一定的灵活性,但在文本和二进制模式下,基本上分别将str和bytes类用作数据

               每当调用f.write(string)时,你提供的字符串都将写入到文件中既有内容的后面

 

 

           请注意,使用完文件后,我调用了方法close,这将在11.2.4节详细介绍。读取也一样简单,只需告诉流你要读取多少个字符(在二进制模式下是多少字节),如下例所示:

        

         

           

          

           注意到:回车符也占了一个字节

            

             如果read里面没有参数则读取余下全部

2.2 读取和写入行

           实际上,本章前面所做的都不太实用。与其逐个读取流中的字符,不如成行地读取。要读取一行(从当前位置到下一个分行符的文本),可使用方法readline。

          调用这个方法时,可不提供任何参数(在这种情况下,将读取一行并返回它);也可提供一个非负整数,指定readline最多可读取多少个字符

          因此,如果some_file. readline()返回的是'Hello, World!\n',那么some_file.readline(5)返回的将是'Hello'。要读取文件中的所有行,并以列表的方式返回它们,可使用方法readlines

           方法writelines与readlines相反:接受一个字符串列表(实际上,可以是任何序列或可迭代对象),并将这些字符串都写入到文件(或流)中。请注意,写入时不会添加换行符,因此你必须自行添加。另外,没有方法writeline,因为可以使用write

2.3 关闭文件

          别忘了调用方法close将文件关闭。通常,程序退出时将自动关闭文件对象(也可能在退出程序前这样做),因此是否将读取的文件关闭并不那么重要。然而,关闭文件没有坏处,在有些操作系统和设置中,还可避免无意义地锁定文件以防修改。另外,这样做还可避免用完系统可能指定的文件打开配额

         对于写入过的文件,一定要将其关闭,因为Python可能缓冲你写入的数据(将数据暂时存储在某个地方,以提高效率)。因此如果程序因某种原因崩溃,数据可能根本不会写入到文件中。

           安全的做法是,使用完文件后就将其关闭。如果要重置缓冲,让所做的修改反映到磁盘文件中,但又不想关闭文件,可使用方法flush。然而,需要注意的是,根据使用的操作系统和设置,flush可能出于锁定考虑而禁止其他正在运行的程序访问这个文件。只要能够方便地关闭文件,就应将其关闭

            实际上,有一条专门为此设计的语句,那就是with语句。with open("somefile.txt") as somefile:  do_something(somefile) 

                 

               with语句让你能够打开文件并将其赋给一个变量(这里是ling)。在语句体中,你将数据写入文件(还可能做其他事情)。到达该语句末尾时,将自动关闭文件,即便出现异常亦如此

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值