綜述:一定要理解光標移動的規則
---------------------------------------------------------------------------第一部分基本操作--------------------------------------------------------------
1.對象可以調用方法,文件是對象,所以也可調用對應的方法。操作文件對象,先建立文件對像。
2.文件打開方法或者說對象創建方法
方法一:函數open('filename'),唯一一個強制參數,文件名,其他參數:打開模式,編碼用的多一些,需要close()函數關閉。返回文件對象(句柄),在對文件進行處理過程都需要使用到這個函數,如果該文件無法被打開,會拋出 OSError。
方法二:with open() ----自動關閉,報錯也會自動關閉,不需要 close() 函數關閉
3.打開模式決定可以進行哪些操作,也就是文件對象模式。
文件打開基本模式:(1)只讀r;不能寫 (2)只寫w;不能讀 (3)追加a;可讀,無則新增,有則追加 (4)組合模式;讀寫
第一部分:文件的讀'r':相關方法 read();readline();readlines()
read(),按照字符取數據,注意光標位置,可指定讀取的字符長度:例如read(6)讀取六個字符長度
readline(),取一行的內容,包括,換行符也會打印,也有參數限制可打印的長度;連續print打印,光標移動打印行的末尾,打印的不重復
readlines(),取全部的內容,把每行作為列表的一個元素,以列表的形式打印,可for循環遍歷
第二部分:文件的寫'w':相關方法write(),文件寫入內容 ,注意,寫的模式慎用,打開的時候已經清空
第三部分:文件的追加‘a’
第四部分:'r+' -----讀寫,打開一個文件用於讀寫。文件指針將會放在文件的開頭。
‘w+’---寫讀,該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件
‘a+’---讀寫,如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。
---------------------------------------------------------第三部分-------------------------------------------------------------------------------
一,關於換行符的打印:
二,光標移動以及位置
seek() tell()
(1)seek()移動讀取文件時光標的位置;
格式:file.seek(offset,whence)也即是seek([文件偏移量][文件指針位置])
說明:參數offset表示要偏移的量,0即是不偏移,正數即向右偏移,負數即向左偏移
參數whence表示參照位置,其中whence取值0 代表從文件開頭開始算起,1代表從當前位置開始算起,2代表從文件末尾算起。whence值為空沒設置時會默認為0
(2)tell()可打印當前光標的位置
展示:
with open('file1.txt') as con: #print(con.read()) mon=con.read(4) print(mon) print(con.tell()) #文件對象調 con.seek(1,0) #從首項開始一個字符的位置 print(con.tell()) ----------結果----- #no p #4 #1
(3)對於同一個文件對象連續的操作要注意光標的位置是連續變動的
#以下寫入文件時 with open('runoob.txt','w') as fib: print(fib.tell()) #源文件已經被格式化,光標在第0位 fib.write('11111') print(fib.tell()) #寫入之后在第5位,在下一位追加 fib.write('22222') #1111122222 文件結果
三,緩存區刷新
flash()刷新緩存區的數據到磁盤,緩沖區被清空,借助進度條打印的例子很容易理解
#實現進度條 #原理:文件沒有關閉之前,數據都是在緩存區 import sys,time fo = open("runoob.txt", "wb") for i in range(30): sys.stdout.write('*') #還在內存緩沖區 sys.stdout.flush() # 刷新緩沖區(可將此行注釋觀察異同!) time.sleep(0.5) fo.close()
比如,一般這個是防止短電未保存。
