一、文件對象
我理解的文件對象就是一個接口,通過這個接口對文件進行相關操作。
《Python 核心編程》上說的很晦澀,這里沒有深刻理解到,希望有人能解釋給我聽。
>>> f = open('demo.txt','r') >>> f <open file 'demo.txt', mode 'r' at 0x00CCCEC0> >>> type(f) <type 'file'>
二、相關函數
[1]、內建函數:open()
提供了初始化輸入/輸出(I/O)操作的通用接口,成功打開一個文件后會返回一個文件對象,否則發生IOError異常。語法如下:
file_object = open(file_name,access_mode = 'r',buffering = -1)
分析如下:
1):file_name:表示要打開文件名字的字符串,可以是相對路徑也可以是絕對路徑。
如:我在D盤新建一個空白名為out的文本文件,然后進行相關操作。
>>> f = open('../out.txt','w') >>> f.write('good') >>> f.close()
則打開該文件后,發現'good'已經寫入進去了。
接下來使用絕對路徑進行訪問,如下:
>>> f = open('D:/out.txt','r') >>> f.read() 'good' >>> f.close()
2、可選變量access_mode也是字符串,代表文件打開模式。
注意:
1):使用'r'或'U'模式打開的文件必須已經存在
2):'w'模式打開的文件若存在則先清空,然后重新創建
3):'a'模式打開的文件是為了追加數據做準備的,所有寫入的數據將追加到文件末尾。如果文件不存在,則自動被創建。
4):'+'代表可讀可寫
5):'b'代表二進制模式訪問
6):默認情況下是 'r'
3、buffering可選參數,用于指示訪問文件所采用的緩存方式。0表示不緩存;1表示只緩存一行,n代表緩存n行。如果不提供或為負數,則代表使用系統默認的緩存機制。
用處?這個麻煩有人能告訴我!
關閉文件:
打開文件消耗系統資源, 并且依賴于文件模式, 其它程序或許不能訪問它們。這就是一旦操作完畢就該關閉文件的重要所在。
接上面的操作,加入還沒有關閉:
>>> f.closed #判斷是否關閉 False >>> f.close() #關閉方法 >>> f.closed True >>> f.tell() #如果已關閉,則一切針對文件操作都無效Traceback (most recent call last):File "<pyshell#27>", line 1, in <module>f.tell() ValueError: I/O operation on closed file >>>
[2]、工廠函數file()
與open()一樣,可相互替換
>>> f = file('../out.txt','r') >>> f.read() 'good' >>> f.close()
三、相關方法
返回一個文件對象后(句柄),其實我也不清楚到底什么是句柄,這里摘自百度百科:
句柄,是整個windows編程的基礎。一個句柄是指使用的一個唯一的整數值,即一個四字節長的數值,來標志應用程序中的不同對象和同類對象中的不同的實 例,諸如,一個窗口,按鈕,圖標,滾動條,輸出設備,控件或者文件等。應用程序能夠通過句柄訪問相應的對象的信息,但是句柄不是一個指針,程序不能利用句柄來直接閱讀文件中的信息。如果句柄不用在I/O文件中,它是毫無用處的。 句柄是windows用來標志應用程序中建立的或是使用的唯一整數,windows使用了大量的句柄來標志很多對象。
一般與文件相關的方法無非是:輸入、輸出、文件內移動、雜項
[1]、輸入
1、read():讀取字節到字符串中,有可選參數size,默認是-1,如果為-1或復數則文件將會被讀取到文件末尾。
>>> f.read() 'good' >>> f.read(2) 'go'
2、readline():讀取文件的一行,包括行結束符。同read()也有個可選參數size。
3、readlines():讀取所有(剩余的)然后將它們作為字符串列表返回,它有個可選參數sizhint代表返回的最大字大小。
>>> f = file('../out.txt','r') >>> f.readlines() ['good']
[2]、輸出
1、write():把含有文本數據或二進制數據塊的字符串寫入到文件中去。
2、writelines():針對列表操作,接受一個字符串列表作為參數,將它們寫入文件,行結束符并不會被自動加入,如果需要的話必須在調用writelines方法前給每一行結尾加上結束符。
>>> f = open('d:/out.txt','w') >>> f.writelines(['man']) >>> f.close() >>> f = open('d:/out.txt','r') >>> f.read() 'man'
【注意:】
當使用read()或者readlines()從文件中讀取行時,Python并不會刪除行結束符,這個操作留給了程序員。
>>> f.readlines() ['game is your life,game is your life,game is your life,game is your life,game is your life,[*]\n', 'game is your life,game is your life,game is your life[]']--------------------------- >>> f = open('demo.txt','r') >>> data = [line.strip() for line in f.readlines()] >>> data ['game is your life,game is your life,game is your life,game is your life,game is your life,[*]', 'game is your life,game is your life,game is your life[]']
類似的,write()和writelines()也不會自動加入行結束符,應該自己添加。
>>> f = open('demo.txt','w') >>> f.writelines([' my name is BeginMan\n,I like coding']) >>> f.close()
打開該文件可查看:
[3]、文件內移動
tell()、seek()方法
f = open('d:/out.txt','rb') print f.tell() #[1] f.seek(10,1) #[2] print f.tell() #10 print f.read(10) # BeginMan, print f.read(18) #I like coding. print f.tell() #38""" 【1】:tell(): tell 方法確認了已經移到當前文件位置 一個文件對象維護它所打開文件的狀態。文件對象的 tell 方法告訴你在打開文件中的當前位置。 因為我們還沒有對這個文件做任何事,當前位置為 0,它是文件的開始處。 """ """ 【2】:seek(): 文件對象的 seek 方法在打開文件中移動到另一個位置。第二個參數指出第一個參數是什么意思: 0 表示移動到一個絕對位置 (從文件開始算起), 1 表示移到一個相對位置 (從當前位置算起), 還有 2 表示文件末尾 """
[4]、文件迭代
>>> f = open('d:/out.txt','rb') >>> for eachline in f:eachline'my name is BeginMan,\r\n' 'I like coding.\r\n'
四、相關屬性
file.closed:文件已被關閉,否則為False
file.mode:文件訪問模式
file.name:文件名稱
>>> f.mode 'r' >>> f.name 'demo.txt'
FROM:http://www.cnblogs.com/BeginMan/p/3166644.html