Python零碎知识(3):对文件的基本操作

一、概述

Python内置函数open,用来打开在磁盘上的文件,并返回一个文件对象,所有对该文件的后续操作都是通过这个"句柄"来进行的,文件方法可分:输入、输出、文件内移动、和其他等。

1.打开文件

open 方法可以接收三个参数:文件名,模式,和缓冲区参数。只有第一个参数,文件名,是必须的;其它两个是 可选的。如果没有指定,文件以文本方式打开。

复制代码
1 f=open('demo.txt','w')
2 print f.name    
3 print f.demo
4 
5 name属性;文件名
6 demo属性;文件以何种模式被打开    
复制代码

2.关闭文件

打开文件消耗系统资源, 并且依赖于文件模式, 其它程序或许不能访问它们。这就是一旦操作完毕就该关闭文件的重要所在。

复制代码
1 f.close()
2 f.closed    #输出True,表示文件关闭状态
3 
4 #如果文件已经关闭,则可操作打开文件的方法都不能用,
5 f.seek()  
6 f.tell()
7 f.read()
8 f.close()
复制代码

 

二、理解读取文件
例如 我们来读取这个文件 all.py

复制代码
 1 '''
 2 Created on 2013-3-7
 3 
 4 @author: Administrator
 5 '''
 6 def info(object, spacing=10, collapse=1):   
 7     """Print methods and doc strings.
 8     
 9     Takes module, class, list, dictionary, or string."""
10     methodList = [method for method in dir(object) if callable(getattr(object, method))]
11     processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
12     print "\n".join(["%s %s" %
13                       (method.ljust(spacing),
14                        processFunc(str(getattr(object, method).__doc__)))
15                      for method in methodList])
16 
17 if __name__ == "__main__":                 
18     print info.__doc__
复制代码

对上述文件操作代码如下:

复制代码
 1 #coding=utf-8
 2 '''
 3 Created on 2013-3-7
 4 
 5 @author: Administrator
 6 '''
 7 f=open("all.py","rb")   #open接收三个参数,文件名、模式、缓冲区参数
 8 print f.tell()          #打开文件的当前位置,因为我们还没有对该文件做任何事,故当前位置为0,表示文件的开始处
 9 f.seek(10,0)            #文件对象的seek方法,表示在打开文件中移动到另一个位置
10 print f.tell()              
11 tagData=f.read(10)      #read 方法从打开文件中读取指定个数的字节,并且返回含有读取数据的字符串
12 print tagData
13 print f.tell()          #tell 方法确认了当前位置已经移动了
14 -------------
15   输出如下: 
0
10
ed on 2013
20                    
复制代码

理解:这一系列操作好像是我们首先打开记事本时,光标立马在记事本的左上角(0)处停留,这就对应着一开始的open之后的tell()。如果我们想要移动光标的位置,如从一开始移动到10个字符,我们可以用seek(10,0)表示,然后在tell(),发现光标已经定位到10了,然后从第10处开始读取10个字符,我们可以使用read(10)

三、写入文件:

Python的open方法用来打开一个文件。第一个参数是文件的位置和文件名,第二个参数是读写模式。

1.写:w (write)  | a (append)
2.读:r
3.二进制(binary ): 写:wb;读:rb 

复制代码
 1 在文件中存储和恢复Python对象
 2 使用Python的pickle模块,可以将Python对象直接存储在文件中,并且可以再以后需要的时候重新恢复到内容中。
 3 
 4 
 5 #coding=utf-8
 6 '''
 7 Created on 2013-3-7
 8 
 9 @author: Administrator
10 '''
11 file=open("pickle.txt","w")
12 import pickle
13 dict={"name":"BeginMan","age":"22"}
14 pickle.dump(dict, file)
15 file.close()
16 
17 test=open("pickle.txt","r")
18 print pickle.load(test)
19 test.close()
复制代码

 四、I/O异常处理

在对文件的操作中以下这些可以引发IOError异常:

1.文件不存在,使用open('....','r')打开读取一个不存在的文件引发异常。

2.文件长度小于指定长度(如:n)时,使用seek(n),则引发异常

3.文件损坏,磁盘损坏时read(),引发异常

 

对此我们需要进行异常处理,如下:

复制代码
 1 try:
 2     f=open('d.txt','r')
 3     try:
 4         f.seek(100,2)
 5         fshow=f.read(1000)
 6     finally:
 7         f.close()
 8 
 9     except IOError:
10     pass
复制代码

第一步:打开文件时try处理
第二步:在第一步的基础上,文件操作时try处理
第三步:一定要记着操作完成后关闭文件,在finally中完成
最后一步:except IOError:...............对异常进行处理

你可能感兴趣的:(Python零碎知识(3):对文件的基本操作)