python文件內容處理(一)


綜述:一定要理解光標移動的規則

---------------------------------------------------------------------------第一部分基本操作--------------------------------------------------------------

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()

 比如,一般這個是防止短電未保存。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM