Python文件IO操作

文件IO常用操作:

open打開
read讀取
write寫入
close關閉
readline行讀取
readlines多行讀取
seek
文件指針操作
tell指針位置

打開操作:


open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

打開一個文件,返回一個文件對象(流對象)和文件描述符。打開文件失敗,則返回異常。

標紅的字,爲最常用到的四個。


基本使用:

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章