1. 程式人生 > >python之檔案讀寫(1)

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”來表示了。