Python 文件操作和管理

Python的文件對象不僅包括實際的磁盤文件,也可以是其他的存儲和通信設備,如鍵盤等。

文件打開和關閉

open(file, mode , buffering, encoding, errors, newline, closefd, opener)

file = 'test.txt'
f = open(file,'w+',encoding = 'utf-8')
f.close # 打開的文件最後需要關閉

with open(file,'w+',encoding = 'utf-8') as f
  f.write('文本內容')
  # 使用 with as 時可以自動關閉

file 參數
file參數數據格式可以是字符串和整數,文件名可以是相對當前目錄的路徑,也可以是絕對路徑表示;如果file是整數表示文件描述符,文件描述符指向一個已經打開的文件。

mode參數
mode設置文件打開模式,文件打開模式用字符串表示,最基本的文件打開模式如下表所示。

字符串 說明
r 只讀模式(默認)
w 寫入模式,覆蓋當前文件
x 獨佔創建模式,如果文件不存在則創建並寫入模式打開,存在則拋出異常
a 追加模式,寫入內容不覆蓋
b 二進制模式
t 文本模式(默認)
+ 更新模式

b和t是文件類型模式,如果是二進制文件需要設置rb、wb、xb、ab;如果文本文件需要設置rt、wt、xt、at,由於t是默認模式,所以可以省略爲r、w、x、a。
+必須與r、w、x或a組合使用,設置文件爲讀寫模式,對於文本文件可以使用r+、w+、x+或a+;對於二進制文件可以使用rb+、wb+、xb+或ab+。
注意 r+、w+和a+區別。r+打開文件時如果文件不存在則拋出異常;w+打開文件時如果文件不存在則創建文件,文件存在則清除文件內容;a+類似於w+,打開文件時如果文件不存在則創建文件,文件存在則在文件末尾追加。

buffering參數
buffering是設置緩衝區策略,默認值爲-1,當buffering=-1時系統會自動設置緩衝區,通常是4096或8192字節;當buffering=0時是關閉緩衝區,關閉緩衝區時數據直接寫入到文件中,這種模式主要應用於二進制文件寫入操作;當buffering>0時,buffering是設置緩衝區字節大小

encoding和errors參數
encoding用來指定打開文件時的文件編碼,主要用於文本文件打開。errors參數用來指定當編碼發生錯誤時如何處理。

newline參數
newline設置換行模式。

closefd和opener參數
這兩個參數是在file參數爲文件描述符時使用。closefd爲True時,文件對象調用close()方法關閉文件同時也會關閉文件描述符所對應的文件;closefd爲False時,文件對象調用close()方法關閉文件,但不會關閉文件描述符所對應的文件。
opener參數用於打開文件時執行一些加工操作,opener參數執行一個函數,該函數返回一個文件描述符。

文件讀寫

文本文件讀寫的單位是字符,而且字符是有編碼的,二進制文件讀寫的單位是字節,不需要考慮編碼的問題。讀寫主要方法如下:

函數名 說明
read(size=-1) 從文件中讀取字符串,size限制讀取最多字符數,size=-1沒有限制讀取全部內容。
readline(size=-1) 讀取到換行符或文件尾並返回單行字符串。如果已經到文件尾,則返回一個空字符串。size是限制讀取的字符數,size=-1沒有限制。
readlines(hint=-1) 讀取文件數據到一個字符串列表中,每一個行數據是列表的一個元素。hint是限制讀取的行數,hint=-1沒有限制。
write(s) 將字符串s寫入文件,並返回寫入的字符數。
writelines(lines) 向文件中寫入一個列表。不添加行分隔符,因此通常爲每一行末尾提供行分隔符。
flush() 刷新寫緩衝區,數據會寫入到文件中。
file = 'test.txt'
with open(file,'r+',encoding = 'utf-8') as f:
    content = f.read()
    print(content)
    print(type(content))
    print(f.tell()) # 獲得當前光標位置
    f.seek(0) # 設置當前光標位置
    content = f.readline() # 只讀一行
    print(content)
    print(type(content))
    f.seek(0)
    content = f.readlines() # 全部讀出來,用列表裝
    print(content)
    print(type(content))

在這裏插入圖片描述
read() 全部讀取,返回str,readline()只讀一行,返回str,readlines全讀,返回list。

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