Python文件IO操做

文件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()查看.

相關文章
相關標籤/搜索