文件IO經常使用操做:python
open | 打開 |
read | 讀取 |
write | 寫入 |
close | 關閉 |
readline | 行讀取 |
readlines | 多行讀取 |
seek |
文件指針操做 |
tell | 指針位置 |
打開操做:
windows
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)緩存
打開一個文件,返回一個文件對象(流對象)和文件描述符。打開文件失敗,則返回異常。
ide
標紅的字,爲最經常使用到的四個。編碼
基本使用:spa
open的參數:操作系統
file: 認識開可者要建立的文件名。若是不指定路徑,默認是當前路徑。指針
mode模式:對象
描述字符 | 意義 |
r | 缺省的,表示只讀打開 |
w | 只寫打開 |
x | 建立並寫入一個新文件 |
a | 寫入打開,若是文件存在,則追加 |
b | 二進制模式 |
t | 缺省的,文本模式 |
+ | 讀寫打開一個文件。給原來只讀、只寫方式打開提供缺失的讀或寫能力 |
open默認是隻讀模式r打開已經存在的文件。隊列
r
只讀打開文件,若是使用write方法,會拋異常。
若是文件不存在,拋出FileNotFoundError異常。
w
表示只寫方式打開,若是讀取則拋出異常;
若是文件不存在,則直接建立文件;
若是文件存在,則清空文件內容;
x
文件不存在,建立文件,並只寫方式打開;
文件存在,拋出FileExistsError異常;
a
文件存在,只寫打開,追加內容;
文件不存在,則建立後,只寫打開,追加內容;
r是隻讀,wxa都是隻寫
wxa均可以產生新文件,w無論文件存在與否,都會生成全新內容的文件;a無論文件是否存在,都能在打開的文件
尾部追加;x必需要求文件事先不存在,本身造一個新文件;
文本模式t
字符流,將文件的字節按照某種字符編碼理解,按照字符操做。open的默認mode就是rt;
二進制模式b
字節流,將文件就按照字節理解,與字符編碼無關。二進制模式操做時,字節操做使用bytes類型.
+
爲r、w、a、x提供缺失的讀寫功能,可是,獲取文件對象依舊按照r、w、a、x本身的特徵。
+不能單獨使用,能夠認爲它是爲前面的模式字符作加強功能的。
文件指針
文件指針,指向當前字節位置
mode=r,指針起始在0
mode=a, 指針起始在EOF
tell()顯示指針當前位置
seek(offset[,whence]),移動文件指針位置,offset偏移多少字節。whence從哪裏開始。
文本模式下:
whence 0缺省值,表示從頭開始,offset只能正整數。
whence 1表示從當前位置,offset只接受0
whence 2表示從EOF開始,offset只接受0
二進制模式下:
whence 0缺省值,表示從頭開始,offset只能正整數
whence 1表示從當前位置,offset可正可負
whence 2表示從EOF開始,offset可正可負
二進制模式支持任意起點的偏移,從頭,從尾,從中間位置開始。
向後seek能夠超界,可是向前seek的時候,不能超界,不然拋出異常。
buffering: 緩衝區
-1表示使用缺省大小的buffer。若是是二進制模式,使用io.DEFAULT_BUFFER_SIZE值,默認是4096或8192。
若是是文本模式,若是是終端設備,是行緩存方式,若是不是,則使用二進制模式的策略。
0 只在二進制模式使用,表示關buffer
1 只在文本模式使用,表示使用行緩衝。意思是見到換行符就flush
大於1用於指定buffer的大小
buffer緩衝區
緩衝區一個內存空間,通常來講是一個FIFO隊列,到緩衝區滿了或者達到閾值,數據纔會flush到磁盤。
flush() 將緩衝區數據寫入磁盤(實際上是磁盤的緩衝區);
close()關閉前會調用flush()
import io print(io.DEFAULT_BUFFER_SIZE)
encoding: 編碼,僅文本模式使用
None 表示使用缺省編碼,依賴操做系統。
windows下缺省GBK(0xB0A1),Linux下缺省UTF-8(0xE5958A)
其它參數:
errors: 什麼樣的編碼錯誤將被捕獲;
None和strict表示有編碼錯誤將拋出ValueError異常;ignore表示忽略;
newline: 文本模式中,將行的轉換。能夠爲None, " \r \n \r\n
讀時,None表示\r \n \r\n都被轉換爲\n;
"表示不會自動轉換通用換行符;
其它合法字符表示換行符就是指定字符,就會按照指定字符分行;
寫時,none表示\n都會被替換爲系統缺省分隔符os.linesep;
\n或"表示\n不替換;
其它合法字符表示\n會被替換爲指定的字符;
closed: 關閉文件描述符,True表示關閉它,False會在文件關閉後保持這個描述符;
fileobj.fileno()查看.