01. 檔案的基本操作
1.1 操作檔案的套路
在 計算機 中要操作檔案的套路非常固定,一共包含三個步驟:
- 打開檔案
- 讀、寫檔案
- 讀将檔案内容讀入記憶體
- 寫将記憶體内容寫入檔案
- 關閉檔案
2.2 操作檔案的函數/方法
- 在
中要操作檔案需要記住 1 個函數和 3 個方法Python
序号 | 函數/方法 | 說明 |
01 | open | 打開檔案,并且傳回檔案操作對象 |
02 | read | 将檔案内容讀取到記憶體 |
03 | write | 将指定内容寫入檔案 |
04 | close | 關閉檔案 |
-
函數負責打開檔案,并且傳回檔案對象open
-
/read
/write
三個方法都需要通過檔案對象來調用close
2.3 read 方法 —— 讀取檔案
-
函數的第一個參數是要打開的檔案名(檔案名區分大小寫)open
- 如果檔案存在,傳回檔案操作對象
- 如果檔案不存在,會抛出異常
-
方法可以一次性讀入并傳回檔案的所有内容read
-
方法負責關閉檔案close
- 如果忘記關閉檔案,會造成系統資源消耗,而且會影響到後續對檔案的通路
- 注意:
方法執行後,會把檔案指針移動到檔案的末尾read
# 1. 打開 - 檔案名需要注意大小寫
file = open("README")
# 2. 讀取,一次讀取
text = file.read()
print(text)
# 3. 關閉
file.close()
檔案指針
- 檔案指針标記從哪個位置開始讀取資料
- 第一次打開檔案時,通常檔案指針會指向檔案的開始位置
- 當執行了
方法後,檔案指針會移動到讀取内容的末尾read
- 預設情況下會移動到檔案末尾
思考
- 如果執行了一次
方法,讀取了所有内容,那麼再次調用 read
方法,還能夠獲得到内容嗎?read
- 答: 不能,第一次讀取之後,檔案指針移動到了檔案末尾,再次調用不會讀取到任何的内容
2.4 打開檔案的方式
-
函數預設以隻讀方式打開檔案,并且傳回檔案對象open
文法如下:
f = open("檔案名", "通路方式")
通路方式 | 說明 |
r | 以隻讀方式打開檔案。檔案的指針将會放在檔案的開頭,這是** **。如果檔案不存在,抛出異常 |
w | 以隻寫方式打開檔案。如果檔案存在會被覆寫。如果檔案不存在,建立新檔案 |
a | 以追加方式打開檔案。如果該檔案已存在,檔案指針将會放在檔案的結尾。如果檔案不存在,建立新檔案進行寫入 |
r+ | ( ) 以讀寫方式打開檔案。檔案的指針将會放在檔案的開頭。如果檔案不存在,抛出異常 |
w+ | ( )以讀寫方式打開檔案。如果檔案存在會被覆寫。如果檔案不存在,建立新檔案 |
a+ | ( )以讀寫方式打開檔案。如果該檔案已存在,檔案指針将會放在檔案的結尾。如果檔案不存在,建立新檔案進行寫入 |
為什麼不推薦
- 頻繁的移動檔案指針,會影響檔案的讀寫效率,開發中更多的時候會以隻讀、隻寫的方式來操作檔案
# 打開檔案
f = open("README", "w")
f.write("hello python!\n")
f.write("今天深圳35度")
# 關閉檔案
f.close()
2.5 按行讀取檔案内容
-
方法預設會把檔案的所有内容一次性讀取到記憶體read
- 如果檔案太大,對記憶體的占用會非常嚴重
readline
方法
readline
-
方法可以一次讀取一行内容readline
- 方法執行後,會把檔案指針移動到下一行,準備再次讀取
# 打開檔案
file = open("README")
while True:
# 讀取一行内容
text = file.readline()
# 判斷是否讀到内容
if not text:
break
# 每讀取一行的末尾已經有了一個 `\n`
print(text, end="")
# 關閉檔案
file.close()
2.6 檔案讀寫案例 —— 複制檔案
小檔案複制
- 打開一個已有檔案,讀取完整内容,并寫入到另外一個檔案
# 1. 打開檔案
file_1 = open("README")
file_2 = open("README_copy", "w")
# 2. 讀取并寫入檔案
text = file_1.read()
file_2.write(text)
# 3. 關閉檔案
file_1.close()
file_2.close()
大檔案複制
- 打開一個已有檔案,逐行讀取内容,并順序寫入到另外一個檔案
# 1. 打開檔案
file_1 = open("README")
file_2 = open("README_copy", "w")
# 2. 讀取并寫入檔案
while True:
# 每次讀取一行
text = file_1.readline()
# 判斷是否讀取到内容
if not text:
break
file_2.write(text)
# 3. 關閉檔案
file_1.close()
file_2.close()