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\n')
>>> 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

  

 

posted @ 2017-03-14 18:28  KoishNee  阅读(187)  评论(0编辑  收藏  举报