一、概述
Python內建函數open,用來開啟在磁碟上的檔案,並返回一個檔案對象,所有對該檔案的後續操作都是通過這個"控制代碼"來進行的,檔案方法可分:輸入、輸出、檔案內移動、和其他等。
1.開啟檔案
open 方法可以接收三個參數:檔案名稱,模式,和緩衝區參數。只有第一個參數,檔案名稱,是必須的;其它兩個是 可選的。如果沒有指定,檔案以文本方式開啟。
1 f=open('demo.txt','w')2 print f.name 3 print f.demo4 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 tagData13 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: Administrator10 '''11 file=open("pickle.txt","w")12 import pickle13 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:...............對異常進行處理