python文件處理python
1、文件處理的流程函數
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)