zoukankan      html  css  js  c++  java
  • python-文件基本操作(二)

    在上一篇文章中,简单介绍了打开文件的方法以及关于读、写、追加的操作,点击此处查看。

    在此篇文章中,继续介绍另外一种打开文件的方法和几种同时读写的模式。

    一、打开文件方法:with

    使用file()或open()打开文件时,最后一定要使用close()方法来关闭文件,为了避免忘记使用,还使用使用with的方法开打开文件,代码如:

    with open ('文件名','模式')   as  f:
        ...
    

    其中,f为文件句柄,该打开文件的方式等同于f=open('文件名','模式')

    此方法也可以一次打开多个文件,如:

    with open ('文件名1','模式')   as  f1,open('文件名2','模式') as f2.....:
        ...
    

    当文件过多时,会导致一行代码过长的情况,因此推荐使用如下写法:

    with open ('文件名1','模式')  as  f1,
        open ('文件名2','模式')  as  f2:
           ...
    

    我们来使用closed()判断文件是否关闭

    #使用open()方法打开,不加入close()
    >>> f=open('info.log','r')
    >>> print f.closed()
    False
    
    
    #使用open()方法打开,加入close()
    >>> f=open('info.log','r')
    >>> f.close()
    >>> print f.closed()
    True
    
    
    #使用with打开
    >>> with open ('info.log','r'):
    >>> print f.closed()                  #注意print一定要与with处于同一个结构层次下
    True
    

    二、几种同时读写模式

    在python中除了普通打开模式(r、w、a)外,还有几种同时读写的模式,包括:

      r+:读写,可读可写,若文件不存在,报错

      w+:写读,可读可写,创建新文件

      a+:追加和读,可读可追加,若文件不存在,则创建

    三、指针

    为了便于理解同时读写模式,首先引入指针

    有一个文件info.log  文件内容如下:

    ①获取文件句柄所在的指针tell()

    例子:

    >>> f=file('info.log','r')
    >>> print f.tell()             #获取初始时的指针
    >>> print f.readline()         #读取文件第一行
    >>> print f.tell()             #获取读完第一行后的指针
    >>> f.close()
    0                       #第一次指针的位置
    aaaa
    5                              #第二次指针的位置
    

    ②设置文件句柄所在的指针seek() 

    例子:

    >>> f=file('info.log','r')
    >>> print f.tell()
    >>> print f.readline()
    >>> f.seek(3)             #设置指针位置
    >>> print f.tell()
    >>> f.close()
    

    四、读写:r+

    代码:

    #使用r+打开文件时,不用read()
    >>> f=open('info.log','r+')
    >>> f.seek(5)           #指针指向第二行
    >>> print f.tell()
    >>> f.write('1111')
    >>> print f.tell()
    >>> f.close()
    5
    9
    

    文件结果:

    注意:当使用r+打开文件时,如果使用了read(),那么不管指针在哪里,用write()方法时,新增的内容始终在文件结尾,除非在read()后重新指定了指针。如下:

    >>> f=open('info.log','r+')
    >>> f.readline()          #读取文件第一行内容
    >>> print f.tell()
    >>> f.write('1111')
    >>> print f.tell()
    >>> f.close()
    5
    25
    

    文件结果:

    五、写读:w+

    >>> f=open('info.log','w+')
    >>> print f.read()           
    >>> f.write('1111
    ')
    >>> f.write('2222')
    >>> print f.tell()
    >>> pring f.read()
    >>> f.seek(0)
    >>> print f.read()
    >>> f.close()
    #执行结果
                         #由于是w+模式,因此会先覆盖原文件内容,此时内容为空,print f.read()  结果为空
    8                    #两次write()后,查看指针位置
                         #此时指针处于文件末尾,pring f.read()的结果为空
    11112222             #重新把指针指向文件开头后,再print f.read(),有结果
    

    六、追加读:a+

    >>> f=open('info.log','a+')
    >>> print f.tell()
    >>> print f.read()
    >>> f.write('1111')
    >>> print f.tell()
    >>> print f.read()
    >>> f.seek(0)
    >>> print f.read()
    >>> f.close()
    #执行结果
    21                              #应为是a+模式打开,指针会指向文件结尾
                                    #指针在文件结果,因此print f.read()内容为空
    25                              #写入内容后,查看指针位置
                                    #写入内容后,指针还是在结尾,因此print f.read()内容还是为空
    aaaa                            #重新定位指针后,print f.read()出的内容
    bbbb
    ccccc
    dddd
    

      

  • 相关阅读:
    01uni-app的创建运行在不同端上的配置 以及tarBar的配置
    js循环之map在工作中的使用
    GPTL L3-003 社交集群(并查集)
    GPLT L2-024 部落 (并查集)
    GPLT L2-010 排座位 (并查集)
    GPLT L2-007 家庭房产 (并查集)
    Codeforces Round #533 (Div. 2) D. Kilani and the Game(BFS)
    Codeforces Round #533 (Div. 2) C. Ayoub and Lost Array(递推)
    Codeforces Round #533 (Div. 2) B. Zuhair and Strings(字符串)
    Codeforces Round #533 (Div. 2) A. Salem and Sticks(枚举)
  • 原文地址:https://www.cnblogs.com/nizhihong/p/6545686.html
Copyright © 2011-2022 走看看