python基礎5 ---python文件處理

python文件處理python

1、文件處理的流程函數

  1. 打開文件,獲得文件句柄並賦值給一個變量
  2. 經過句柄對文件進行操做
  3. 關閉文件

2、文件的操做方法編碼

  一、文件打開模式格式:spa

    文件句柄 = open('文件路徑', '模式')操作系統

  註釋:打開文件時,須要指定文件路徑和以何等方式打開文件,打開後,便可獲取該文件句柄,往後經過此文件句柄對該文件操做。unix

  二、文件打開模式:code

     r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】blog

     w,只寫模式【不可讀;不存在則建立;存在則清空內容】內存

      x, 只寫模式【不可讀;不存在則建立,存在則報錯】it

     a, 追加模式【可讀;   不存在則建立;存在則只追加內容】

     b"表示以字節的方式操做 :rb  或 r+b

                wb 或 w+b

                xb 或 w+b

                ab 或 a+b

    補充:r、w、a爲打開文件的基本模式,對應着只讀、只寫、追加模式;b、t、+、U這四個字符,與以上的文件打開模式組合使用,二進制模式,文本模式,讀寫模式、     通用換行符,根據實際狀況組合使用、

  三、文件內置函數flush

    flush原理: 文件操做是經過軟件將文件從硬盤讀到內存 ,寫入文件的操做也都是存入內存緩衝區buffer(內存速度快於硬盤,若是寫入文件的數據都從內存刷到硬盤,內存與硬盤的速度延遲會被無限放大,效率變低,因此要刷到硬盤的數據咱們統一往內存的一小塊空間即buffer中放,一段時間後操做系統會將buffer中數據一次性刷到硬盤).flush的做用是強制將寫入的數據刷到硬盤。

  四、open函數詳解

    open()語法
         格式:open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])

    open函數有不少的參數,經常使用的是file,mode和encoding
    file文件位置,須要加引號
    mode文件打開模式
    buffering的可取值有0,1,>1三個,0表明buffer關閉(只適用於二進制模式),1表明line buffer(只適用於文本模式),>1表示初始化的buffer大小;
    encoding表示的是返回的數據採用何種編碼,通常採用utf8或者gbk;
    errors的取值通常有strict,ignore,當取strict的時候,字符編碼出現問題的時候,會報錯,當取ignore的時候,編碼出現問題,程序會忽略而過,繼續執行下面的程序。
    newline能夠取的值有None, \n, \r, 」, ‘\r\n',用於區分換行符,可是這個參數只對文本模式有效;
    closefd的取值,是與傳入的文件參數有關,默認狀況下爲True,傳入的file參數爲文件的文件名,取值爲False的時候,file只能是文件描述符,什麼是文件描述符,就是一個非負整數,在Unix內核的系統中,打開一個文件,便會返回一個文件描述符。

   五、文件操做參數

   .read([size])         #size爲讀取的長度,以byte爲單位

 

   .readline([size])       #讀一行,若是定義了size,有可能返回的只是一行的一部分

 

   .readlines([size])       #把文件每一行做爲一個list的一個成員,並返回這個list。其實它的內部是經過循環調用readline()來實現的。若是提供size參數,size是表示讀取內容的總長,也就是說可能只讀到文件的一部分。

 

   .write(str)          #把str寫到文件中,write()並不會在str後加上一個換行符

 

   .writelines(seq)        #把seq的內容所有寫到文件中(多行一次性寫入)。這個函數也只是忠實地寫入,不會在每行後面加上任何東西。

 

   .close()            #關閉文件。python會在一個文件不用後自動關閉文件,不過這一功能沒有保證,最好仍是養成本身關閉的習慣。  若是一個文件在關閉後還對其進行操做會產生ValueError

 

   .flush()            #把緩衝區的內容寫入硬盤

 

   .isatty()            #文件是不是一個終端設備文件(unix系統中的)

 

   .tell()             #返回文件操做標記的當前位置,以文件的開頭爲原點

 

   .next()                #返回下一行,並將文件操做標記位移到下一行。把一個file用於for … in file這樣的語句時,就是調用next()函數來實現遍歷的。

 

   .seek(offset[,whence])#將文件打操做標記移到offset的位置。這個offset通常是相對於文件的開頭來計算的,通常爲正數。但若是提供了whence參數就不必定了,whence能夠爲0表示從頭開始計算,1表示以當前位置爲原點計算。2表示以文件末尾爲原點進行計算。須要注意,若是文件以a或a+的模式打開,每次進行寫操做時,文件操做標記會自動返回到文件末尾。

   .truncate([size])        #把文件裁成規定的大小,默認的是裁到當前文件操做標記的位置。若是size比文件的大小還要大,依據系統的不一樣多是不改變文件,也多是用0把文件補到相應的大小,也多是以一些隨機的內容加上去

   六、上下文管理實例。

with open('a.txt','w') as f:
    pass
with open('a.txt','r') as read_f,open('b.txt','w') as write_f:
    data=read_f.read()
    write_f.write(data)
相關文章
相關標籤/搜索