博客 / 詳情

返回

大話 Python:python 基礎鞏固 -- 文件 I/O 與 File 對象的應用

python 在操作文件 I/O 的時候,有兩個非常重要的方面:一個是 open() 函數的掌握、另一個是 File 文件對象的相關函數的掌握。相比其他面嚮對象語言的文件流的用法是比較簡便的,並且提供很多的文件打開模式算是比較優秀了。

1、全局函數 open()

open() 函數的可選參數還是比較多的,一般在讀取文件時只使用文件路徑、文件打開模式就可以完成大多數的使用場景。使用 open() 函數打開文件後返回的就是一個 File 文件對象,然後使用 File 對象的內部函數實現對文件的操作,需要注意的是在完成文件對象的操作後必須對文件進行關閉。

1open('/usr/load/download/20210320/test.txt',mode='r')

open() 函數的完整的語法格式

1open('/usr/load/download/20210320/test.txt', mode='r', buffering=-1, 
2encoding=None, errors=None, newline=None, closefd=True, opener=None)

open() 函數完整語法格式的各個可選參數代表什麼樣的含義

 1file: 必填參數項 -- 文件的打開的路徑(支持相對路徑和絕對路徑)
 2mode: 可選參數項 -- 文件打開模式,默認為只讀模式
 3常見的 mode 參數值的格式
 4# 打開模式
 5'b':-- 以二進制模式打開
 6't':-- 以文本模式打開(缺省模式)
 7'+':-- 以讀寫模式打開
 8'U':-- 以通用換行符模式打開
 9# 操作模式
10'r':-- 以只讀模式打開
11'w':-- 以只寫模式打開
12'a':-- 以追加模式打開
13# 組合模式,將打開模式與操作模式進行組合使用,下列為常見組合
14'r+':-- 以文本讀寫模式打開
15'w+':-- 以文本讀寫模式打開
16'a+':-- 以文本讀寫模式打開
17buffering: 可選參數項 -- 設置緩衝,緩衝的設置是為了減少 IO 的使用,一般設置 0(二進制模式關閉緩衝),1(文本模式一行的緩衝),>1(初始化緩衝的大小)
18encoding: 可選參數項 -- 文件編碼,一般情況使用 utf-8 編碼即可
19errors: 可選參數項 -- 設置報錯級別,為 None 時不設置,為 strict 時字符編碼出現問題會報錯,為 ignore 時忽略編碼問題
20newline: 可選參數項 -- 區分換行符,只對文本模式有效,一般情況下可以取值None,'n','r','','rn' 來自定義換行
21closefd: 可選參數項 -- 傳入的file參數類型,為 True 時參數類型表示文件名稱,False 時為文件描述符
22opener: 可選參數項 -- 設置自定義開啓器,返回值必須是一個打開的文件描述符。

2、File 文件操作對象

File -> file_obj.write(string)

1# 使用只寫的模式打開文件
2file_obj = open("/usr/load/test.txt", "w")
3# 定義原始數據
4string = "Python 集中營"
5# 將字符串寫入文件
6file_obj.write(string)
7# 關閉文件
8file_obj.close()

File -> file_obj.tell()

1# 使用讀寫的模式打開文件
2file_obj = open("/usr/load/test.txt", "rw+")
3current_data = file_obj.tell()
4print "當前數據位置: ",current_data 

File -> file_obj.read([size])

1# 使用讀寫的模式打開文件
2file_obj = open("/usr/load/test.txt", "rw+")
3# 獲取文件名稱
4print "文件名為: ", file_obj.name
5# 讀取 5 個字節
6data1 = file_obj.read(5)
7# 讀取整個文件
8data2 = file_obj.read(-1)

File -> file_obj.next()

 1# 使用讀寫的模式打開文件
 2file_obj = open("/usr/load/test.txt", "rw+")
 3# 獲取文件名稱
 4print "文件名為: ", file_obj.name
 5for i in range(10):
 6    # 讀取下一行
 7    data_line = file_obj.next()
 8    print "第 %d 行 - %s" % (i, data_line)
 9# 關閉文件
10file_obj.close()

File -> file_obj.readline([size])

1# 使用讀寫的模式打開文件
2file_obj = open("/usr/load/test.txt", "rw+")
3# 獲取文件名稱
4print "文件名為: ", file_obj.name
5# 讀取一行的 10 個字節
6data_line1 = file_obj.readline(10)
7# 讀取一行
8data_line2 = file_obj.readline()

File -> file_obj.readlines([size])

 1# 使用讀寫的模式打開文件
 2file_obj = open("/usr/load/test.txt", "rw+")
 3# 獲取文件名稱
 4print "文件名為: ", file_obj.name
 5# readlines() 函數讀取所有行
 6# 遍歷每行
 7for data_line in file_obj.readlines():   
 8    # 去除首尾多餘的空格 
 9    data_line = data_line.strip()                             
10
11# 關閉文件
12file_obj.close()

File -> file_obj.flush()

1# 使用讀寫的模式打開文件
2file_obj = open("/usr/load/test.txt", "rw+")
3# 獲取文件名稱
4print "文件名為: ", file_obj.name
5# 刷新緩衝區
6file_obj.flush()
7# 關閉文件
8file_obj.close()

File -> file_obj.close()

1# 使用讀寫的模式打開文件
2file_obj = open("/usr/load/test.txt", "rw+")
3# 獲取文件名稱
4print "文件名為: ", file_obj.name
5# 關閉文件
6file_obj.close()

更多精彩前往微信公眾號【Python 集中營】,專注後端編程實戰,原創文章每天更新!

image.png

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.