python進行文件讀寫的函數是open或file
python
file_handler = open(filename,,mode)
Table mode程序員
模式正則表達式 |
描述編程 |
r緩存 |
以讀方式打開文件,可讀取文件信息。dom |
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
2、從現有文件中獲取信息 使用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 os import stat import time fileStats = 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, ':' + infoValue if 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 os import stat fileStats = 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.path fileStats = '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.'
3、目錄 和普通文件同樣,關於目錄的操做也很容易掌握。首先,列出一個目錄的內容: 1. import os 2. 3. for fileName in os.listdir ( '/' ): 4. print fileName import os for fileName in os.listdir ( '/' ): print fileName 正如你所見,這很簡單,用三行代碼就能夠完成。 建立目錄也很簡單: 1. import os 2. 3. os.mkdir ( 'testDirectory' ) import os os.mkdir ( 'testDirectory' ) 刪除剛纔建立的目錄: 1. import os 2. 3. os.rmdir ( 'testDirectory ) import os os.rmdir ( 'testDirectory ) 嗯,能夠建立多級目錄: 1. import os 2. 3. os.makedirs ( 'I/will/show/you/how/deep/the/rabbit/hole/goes' ) import os os.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 os os.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 fnmatch import os for 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 fnmatch import os for fileName in os.listdir ( '/' ): if fnmatch.fnmatch ( fileName, '?.txt' ): print 'Text file.' 「fnmatch」模塊支持正則表達式: 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 fnmatch import os import re filePattern = 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 glob for fileName in glob.glob ( '*.txt' ): print 'Text file.' 使用必定範圍的字符來匹配一樣可行,就像在正則表達式中使用同樣。假設你想要顯示擴展名前只有一位數字的文件的文件名: 1. import glob 2. 3. for fileName in glob.glob ( '[0-9].txt' ): 4. print filename import glob for fileName in glob.glob ( '[0-9].txt' ): print filename 「glob」模塊利用「fnmatch」模塊來實現。 4、數據編組 使用前一節中介紹的模塊,能夠實如今文件中對字符串的讀寫。 然而,有的時候,你可能須要傳遞其它類型的數據,如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 pickle fileHandle = 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 pickle fileHandle = 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 pickle fileHandle = 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 pickle fileHandle = 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 cPickle fileHandle = open ( 'pickleFile.txt', 'w' ) cPickle.dump ( 1776, fileHandle ) fileHandle.close() 5、建立「虛擬」文件 你用到的許多模塊包含須要文件對象做爲參數的方法。可是,有時建立並使用一個真實的文件並讓人感到有些麻煩。所幸的是,在Python中,你可使用「StringIO」模塊來建立文件並將其保存在內存中: 1. import StringIO 2. 3. fileHandle = StringIO.StringIO ( "Let freedom ring" ) 4. print fileHandle.read() # "Let freedom ring." 5. fileHandle.close() import StringIO fileHandle = 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 cStringIO fileHandle = cStringIO.cStringIO ( "To Kill a Mockingbird" ) print fileHandle.read() # "To Kill a Mockingbid" fileHandle.close() 結論 文件管理,是衆多編程語言的程序員在編寫應用程序是常常遇到的問題。幸虧,和其它語言相比,Python使其出乎意料地容易。Python的標準庫中提供了許多相關的模塊幫助程序員解決這方面的問題,而它的面向對象的機制也簡化了操做。 好了,如今你已經瞭解了Python中文件管理的基本知識,能夠在從此的應用程序中很好地使用了。
版本vbbb