Python 讀寫檔案操作

來源:互聯網
上載者:User

標籤:

 

python進行檔案讀寫的函數是open或file

file_handler = open(filename,,mode)

Table mode

模式

描述

r

以讀方式開啟檔案,可讀取檔案資訊。

w

以寫方式開啟檔案,可向檔案寫入資訊。如檔案存在,則清空該檔案,再寫入新內容

a

以追加模式開啟檔案(即一開啟檔案,檔案指標自動移到檔案末尾),如果檔案不存在則建立

r+

以讀寫方式開啟檔案,可對檔案進行讀和寫操作。

w+

消除檔案內容,然後以讀寫方式開啟檔案。

a+

以讀寫方式開啟檔案,並把檔案指標移到檔案尾。

b

以二進位模式開啟檔案,而不是以文字模式。該模式只對Windows或Dos有效,類Unix的檔案是用二進位模式進行操作的。

 

 

Table 檔案對象方法

方法

描述

f.close()

關閉檔案,記住用open()開啟檔案後一定要記得關閉它,否則會佔用系統的可開啟檔案控制代碼數。

f.fileno()

獲得檔案描述符,是一個數字

f.flush()

重新整理輸出緩衝

f.isatty()

如果檔案是一個互動終端,則返回True,否則返回False。

f.read([count])

讀出檔案,如果有count,則讀出count個位元組。

f.readline()

讀出一行資訊。

f.readlines()

讀出所有行,也就是讀出整個檔案的資訊。

f.seek(offset[,where])

把檔案指標移動到相對於where的offset位置。where為0表示檔案開始處,這是預設值 ;1表示當前位置;2表示檔案結尾。

f.tell()

獲得檔案指標位置。

f.truncate([size])

截取檔案,使檔案的大小為size。

f.write(string)

把string字串寫入檔案。

f.writelines(list)

把list中的字串一行一行地寫入檔案,是連續寫入檔案,沒有換行。

 
例子如下:讀檔案Python代碼  1.read = open(result)  2.       line=read.readline()  3.       while line:  4.             print line  5.             line=read.readline()#如果沒有這行會造成死迴圈  6.       read.close   寫檔案Python代碼  1.read = file(result,‘a+‘)  2.        read.write("\r\n")  3.        read.write("thank you")  4.        read.close  

 

二、從現有檔案中擷取資訊使用Python中的模組,可以從現有檔案中擷取資訊。使用“os”模組和“stat”模組可以擷取檔案的基本資料:1. import os 2. import stat 3. import time<div></div> 4.  5. fileStats = os.stat ( ‘test.txt‘ ) 6. fileInfo = { 7.     ‘Size‘ : fileStats [ stat.ST_SIZE ], 8.     ‘LastModified‘ : time.ctime ( fileStats [ stat.ST_MTIME ] ), 9.     ‘LastAccessed‘ : time.ctime ( fileStats [ stat.ST_ATIME ] ), 10.     ‘CreationTime‘ : time.ctime ( fileStats [ stat.ST_CTIME ] ), 11.     ‘Mode‘ : fileStats [ stat.ST_MODE ] 12. } 13.  14. for infoField, infoValue in fileInfo: 15.     print infoField, ‘:‘ + infoValue 16. if stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ): 17.     print ‘Directory. ‘ 18. else: 19.     print ‘Non-directory.‘ import osimport statimport timefileStats = os.stat ( ‘test.txt‘ )fileInfo = {‘Size‘ : fileStats [ stat.ST_SIZE ],‘LastModified‘ : time.ctime ( fileStats [ stat.ST_MTIME ] ),‘LastAccessed‘ : time.ctime ( fileStats [ stat.ST_ATIME ] ),‘CreationTime‘ : time.ctime ( fileStats [ stat.ST_CTIME ] ),‘Mode‘ : fileStats [ stat.ST_MODE ]}for infoField, infoValue in fileInfo:print infoField, ‘:‘ + infoValueif stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ):print ‘Directory. ‘else:print ‘Non-directory.‘上面這個例子建立了一個包含檔案基本資料的dictionary。然後顯示了相關資訊,並且告訴我們開啟的是否為目錄。我們也可以試一下開啟的是否是其它幾種類型:1. import os 2. import stat 3.  4. fileStats = os.stat ( ‘test.txt‘ ) 5. fileMode = fileStats [ stat.ST_MODE ] 6. if stat.S_ISREG ( fileStats [ stat.ST_MODE ] ): 7.     print ‘Regular file.‘ 8. elif stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ): 9.     print ‘Directory.‘ 10. elif stat.S_ISLNK ( fileStats [ stat.ST_MODE ] ): 11.     print ‘Shortcut.‘ 12. elif stat.S_ISSOCK ( fileStats [ stat.ST_MODE ] ): 13.     print ‘Socket.‘ 14. elif stat.S_ISFIFO ( fileStats [ stat.ST_MODE ] ): 15.     print ‘Named pipe.‘ 16. elif stat.S_ISBLK ( fileStats [ stat.ST_MODE ] ): 17.     print ‘Block special device.‘ 18. elif stat.S_ISCHR ( fileStats [ stat.ST_MODE ] ): 19.     print ‘Character special device.‘ import osimport statfileStats = os.stat ( ‘test.txt‘ )fileMode = fileStats [ stat.ST_MODE ]if stat.S_ISREG ( fileStats [ stat.ST_MODE ] ):print ‘Regular file.‘elif stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ):print ‘Directory.‘elif stat.S_ISLNK ( fileStats [ stat.ST_MODE ] ):print ‘Shortcut.‘elif stat.S_ISSOCK ( fileStats [ stat.ST_MODE ] ):print ‘Socket.‘elif stat.S_ISFIFO ( fileStats [ stat.ST_MODE ] ):print ‘Named pipe.‘elif stat.S_ISBLK ( fileStats [ stat.ST_MODE ] ):print ‘Block special device.‘elif stat.S_ISCHR ( fileStats [ stat.ST_MODE ] ):print ‘Character special device.‘另外,我們可以使用“os.path”來擷取基本資料:1. import os.path 2.  3. fileStats = ‘test.txt‘ 4. if os.path.isdir ( fileStats ): 5.     print ‘Directory.‘ 6. elif os.path.isfile ( fileStats ): 7.     print ‘File.‘ 8. elif os.path.islink ( fileStats ): 9.     print ‘Shortcut.‘ 10. elif os.path.ismount ( fileStats ): 11.     print ‘Mount point.‘ import os.pathfileStats = ‘test.txt‘if os.path.isdir ( fileStats ):print ‘Directory.‘elif os.path.isfile ( fileStats ):print ‘File.‘elif os.path.islink ( fileStats ):print ‘Shortcut.‘elif os.path.ismount ( fileStats ):print ‘Mount point.‘

 

三、目錄和普通檔案一樣,關於目錄的操作也很容易掌握。首先,列出一個目錄的內容:1. import os 2.  3. for fileName in os.listdir ( ‘/‘ ): 4.     print fileName import osfor fileName in os.listdir ( ‘/‘ ):print fileName正如你所見,這很簡單,用三行代碼就可以完成。建立目錄也很簡單:1. import os 2.  3. os.mkdir ( ‘testDirectory‘ ) import osos.mkdir ( ‘testDirectory‘ )刪除剛才建立的目錄:1. import os 2.  3. os.rmdir ( ‘testDirectory ) import osos.rmdir ( ‘testDirectory )嗯,可以建立多級目錄:1. import os 2.  3. os.makedirs ( ‘I/will/show/you/how/deep/the/rabbit/hole/goes‘ ) import osos.makedirs ( ‘I/will/show/you/how/deep/the/rabbit/hole/goes‘ )如果沒有在建立的檔案夾中添加任何東西,就可以一次性將它們全部刪除(即,刪除所列的所有空檔案夾):1. import os 2.  3. os.removedirs ( ‘I/will/show/you/how/deep/the/rabbit/hole/goes‘ ) import osos.removedirs ( ‘I/will/show/you/how/deep/the/rabbit/hole/goes‘ )當需要對一個特定的檔案類型進行操作時,我們可以選擇“fnmatch”模組。以下是顯示“.txt”檔案的內容和“.exe”檔案的檔案名稱:1. import fnmatch 2. import os 3.  4. for fileName in os.listdir ( ‘/‘ ): 5.     if fnmatch.fnmath ( fileName, ‘*.txt‘ ): 6.         print open ( fileName ).read() 7.     elif fnmatch.fnmatch ( fileName, ‘*.exe‘ ): 8.         print fileName import fnmatchimport osfor fileName in os.listdir ( ‘/‘ ):if fnmatch.fnmath ( fileName, ‘*.txt‘ ):print open ( fileName ).read()elif fnmatch.fnmatch ( fileName, ‘*.exe‘ ):print fileName“*”字元可以表示任意長度的字元。如果要匹配一個字元,則使用“?”符號:1. import fnmatch 2. import os 3.  4. for fileName in os.listdir ( ‘/‘ ): 5.     if fnmatch.fnmatch ( fileName, ‘?.txt‘ ): 6.         print ‘Text file.‘ import fnmatchimport osfor fileName in os.listdir ( ‘/‘ ):if fnmatch.fnmatch ( fileName, ‘?.txt‘ ):print ‘Text file.‘“fnmatch”模組支援Regex:1. import fnmatch 2. import os 3. import re 4.  5. filePattern = fnmatch.translate ( ‘*.txt‘ ) 6. for fileName in os.listdir ( ‘/‘ ): 7.     if re.match ( filePattern, fileName ): 8.         print ‘Text file.‘ import fnmatchimport osimport refilePattern = fnmatch.translate ( ‘*.txt‘ )for fileName in os.listdir ( ‘/‘ ):if re.match ( filePattern, fileName ):print ‘Text file.‘若只需要匹配一種類型的檔案,更好的辦法是使用“glob”模組。該模組的格式和“fnmatch”相似:1. import glob 2.  3. for fileName in glob.glob ( ‘*.txt‘ ): 4.     print ‘Text file.‘ import globfor fileName in glob.glob ( ‘*.txt‘ ):print ‘Text file.‘使用一定範圍的字元來匹配同樣可行,就像在Regex中使用一樣。假設你想要顯示副檔名前只有一位元字的檔案的檔案名稱:1. import glob 2.  3. for fileName in glob.glob ( ‘[0-9].txt‘ ): 4.     print filename import globfor fileName in glob.glob ( ‘[0-9].txt‘ ):print filename“glob”模組利用“fnmatch”模組來實現。四、資料編組使用前一節中介紹的模組,可以實現在檔案中對字串的讀寫。然而,有的時候,你可能需要傳遞其它類型的資料,如list、tuple、dictionary和其它對象。在Python中,你可以使用Pickling來完成。你可以使用Python標準庫中的“pickle”模組完成資料編組。下面,我們來編組一個包含字串和數位list:1. import pickle 2.  3. fileHandle = open ( ‘pickleFile.txt‘, ‘w‘ ) 4. testList = [ ‘This‘, 2, ‘is‘, 1, ‘a‘, 0, ‘test.‘ ] 5. pickle.dump ( testList, fileHandle ) 6. fileHandle.close() import picklefileHandle = open ( ‘pickleFile.txt‘, ‘w‘ )testList = [ ‘This‘, 2, ‘is‘, 1, ‘a‘, 0, ‘test.‘ ]pickle.dump ( testList, fileHandle )fileHandle.close()拆分編組同樣不難:1. import pickle 2.  3. fileHandle = open ( ‘pickleFile.txt‘ ) 4. testList = pickle.load ( fileHandle ) 5. fileHandle.close() import picklefileHandle = open ( ‘pickleFile.txt‘ )testList = pickle.load ( fileHandle )fileHandle.close()現在試試儲存更加複雜的資料:1. import pickle 2.  3. fileHandle = open ( ‘pickleFile.txt‘, ‘w‘ ) 4. testList = [ 123, { ‘Calories‘ : 190 }, ‘Mr. Anderson‘, [ 1, 2, 7 ] ] 5. pickle.dump ( testList, fileHandle ) 6. fileHandle.close() import picklefileHandle = open ( ‘pickleFile.txt‘, ‘w‘ )testList = [ 123, { ‘Calories‘ : 190 }, ‘Mr. Anderson‘, [ 1, 2, 7 ] ]pickle.dump ( testList, fileHandle )fileHandle.close()1. import pickle 2.  3. fileHandle = open ( ‘pickleFile.txt‘ ) 4. testList = pickle.load ( fileHandle ) 5. fileHandle.close() import picklefileHandle = open ( ‘pickleFile.txt‘ )testList = pickle.load ( fileHandle )fileHandle.close()如上所述,使用Python的“pickle”模組編組確實很簡單。眾多個物件可以通過它來儲存到檔案中。如果可以的話,“cPickle”同樣勝任這個工作。它和“pickle”模組一樣,但是速度更快:1. import cPickle 2.  3. fileHandle = open ( ‘pickleFile.txt‘, ‘w‘ ) 4. cPickle.dump ( 1776, fileHandle ) 5. fileHandle.close() import cPicklefileHandle = open ( ‘pickleFile.txt‘, ‘w‘ )cPickle.dump ( 1776, fileHandle )fileHandle.close()五、建立“虛擬”檔案你用到的許多模組包含需要檔案對象作為參數的方法。但是,有時建立並使用一個真實的檔案並讓人感到有些麻煩。所幸的是,在Python中,你可以使用“StringIO”模組來建立檔案並將其儲存在記憶體中:1. import StringIO 2.  3. fileHandle = StringIO.StringIO ( "Let freedom ring" ) 4. print fileHandle.read() # "Let freedom ring." 5. fileHandle.close() import StringIOfileHandle = StringIO.StringIO ( "Let freedom ring" )print fileHandle.read() # "Let freedom ring."fileHandle.close()cStringIO”模組同樣有效。它的使用方法和“StringIO”一樣,但就像“cPickle”之於“pickle”,它速度更快:1. import cStringIO 2.  3. fileHandle = cStringIO.cStringIO ( "To Kill a Mockingbird" ) 4. print fileHandle.read() # "To Kill a Mockingbid" 5. fileHandle.close() import cStringIOfileHandle = cStringIO.cStringIO ( "To Kill a Mockingbird" )print fileHandle.read() # "To Kill a Mockingbid"fileHandle.close()結論檔案管理,是眾多程式設計語言的程式員在編寫應用程式是經常遇到的問題。幸好,和其它語言相比,Python使其出乎意料地容易。Python的標準庫中提供了許多相關的模組協助程式員解決這方面的問題,而它的物件導向的機制也簡化了操作。好了,現在你已經瞭解了Python中檔案管理的基本知識,可以在今後的應用程式中很好地使用了。 

 

 

版本vbbb

 

Python 讀寫檔案操作

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.