python之檔案讀寫(1)
1. 從檔案讀取資料
關於對檔案的操作,使用open(filename, mode),開啟檔案。與之對應的,close()用來關閉檔案。對檔案操作完畢切記要關閉。
open函式引數:
mode 引數有:
模式 | 描述 |
---|---|
t | 文字模式 (預設)。 |
x | 寫模式,新建一個檔案,如果該檔案已存在則會報錯。 |
b | 二進位制模式。 |
+ | 開啟一個檔案進行更新(可讀可寫)。 |
U | 通用換行模式(不推薦)。 |
r | 以只讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。 |
rb | 以二進位制格式開啟一個檔案用於只讀。檔案指標將會放在檔案的開頭。這是預設模式。一般用於非文字檔案如圖片等。 |
r+ | 開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。 |
rb+ | 以二進位制格式開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。一般用於非文字檔案如圖片等。 |
w | 開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。 |
wb | 以二進位制格式開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。一般用於非文字檔案如圖片等。 |
w+ | 開啟一個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。 |
wb+ | 以二進位制格式開啟一個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。一般用於非文字檔案如圖片等。 |
a | 開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。 |
ab | 以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。 |
a+ | 開啟一個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。 |
ab+ | 以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。 |
其中重點要理解r,r+,w,w+,a,a+.
博主理解是:
r(read):可讀
w(write): 可寫
a(append):追加
+:許可權升級
1.1 讀取整個檔案
讀取檔案我們使用的函式是read()。read函式可以傳遞引數,下一小節會用到。
1 file = open("test_data.txt", "r", encoding="UTF-8") # open的引數有興趣的小夥伴可以自己查一下 2 res = file.read() 3 print(res) 4 file.close()
1.2 讀取指定位元組的內容
讀取指定位元組,首先我們要知道什麼是位元組:位元組(Byte /bait/ n. [C])是計算機資訊科技用於計量儲存容量的一種計量單位,通常情況下一位元組等於八位,也表示一些計算機程式語言中的資料型別和語言字元。
Ascll碼:一個漢字=2個英文字母=2位元組。
如果我們要讀出檔案中前13個位元組,只需要在read中傳入引數read(13)。試一下
1 file = open("test_data.txt", "r",) 2 res = file.read(13) 3 print(res) 4 file.close()
當在read中輸入負數時,是讀取全部內容。
1 file = open("test_data.txt", "r",) 2 res = file.read(-1) 3 print(res) 4 file.close()
1.3 讀取包含中文內容的文字
utf-8下回車也佔1位元組,其他也是一位元組。
file = open("test_data.txt", "r",encoding="UTF-8") res = file.read(6) print(res) file.close()
結果:
1.4 按行讀取內容
1.4.1 讀一行
按行讀取檔案內容使用的是readline方法。實際操作一下哎。
readline方法也可以傳入引數。我們分別看一下不傳參與傳參的區別:
不傳參:
傳參:
傳入的引數其實是限制作用,可以限制讀取該行的前幾個位元組。
總結:這是按行讀取的,讀完第一行,會根據游標所在的位置,如果該行未讀取完,再執行則繼續讀取該行。如果完整讀取完一行,再執行則讀取下一行。建議讀者配合記事本模擬方便理解。
1 #!/usr/bin/python3 2 # -*- coding: utf-8 -*- 3 # @Time :2018/11/28 16:11 4 # @Author :Yosef 5 # @Email :[email protected] 6 # @File: :class26.py 7 # @Software :PyCharm Community Edition 8 file = open("test_data.txt", "r",encoding="UTF-8") 9 res_1 = file.readline(3) 10 res_2 = file.readline() 11 res_3 = file.readline() 12 res_4 = file.readline() 13 print(res_1) 14 print(res_2) 15 print(res_3) 16 print(res_4) 17 file.close()
結果:
有一點需要提醒,這種讀行也讀取了換行,不想換行的話,可以使用strip(“\n”)來去掉。應該還記得這個函式吧,忘記的話自行百度或者看我字串那邊的部落格。
1 #!/usr/bin/python3 2 # -*- coding: utf-8 -*- 3 # @Time :2018/11/28 16:11 4 # @Author :Yosef 5 # @Email :[email protected] 6 # @File: :class26.py 7 # @Software :PyCharm Community Edition 8 file = open("test_data.txt", "r",encoding="UTF-8") 9 res_1 = file.readline(3) 10 res_2 = file.readline().strip("\n") 11 res_3 = file.readline().strip("\n") 12 res_4 = file.readline().strip("\n") 13 print(res_1) 14 print(res_2) 15 print(res_3) 16 print(res_4) 17 file.close()
1.4.2 讀多行
讀多行用的是readlines方法。看一下下圖:
引數可以傳入動態引數以及關鍵字動態引數。
先不考慮傳參的問題,直接執行結果如下:
我們發現結果是一個列表,而且換行都用“\n”來表示了。