檔案操作
- 檔案操作的作用
- 檔案的基本操作
- 打開
- 讀寫
- 關閉
- 檔案備份
- 檔案和檔案夾的操作
一. 檔案操作的作用
思考:什麼是檔案?
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-Lq3Z4E9A-1597498951213)(檔案操作.assets/1.jpg)]
思考:檔案操作包含什麼?
答:打開、關閉、讀、寫、複制…
思考:檔案操作的的作用是什麼?
答:讀取内容、寫入内容、備份内容…
總結:檔案操作的作用就是把一些内容(資料)存儲存放起來,可以讓程式下一次執行的時候直接使用,而不必重新制作一份,省時省力。
二. 檔案的基本操作
2.1 檔案操作步驟
- 打開檔案
- 讀寫等操作
- 關閉檔案
注意:可以隻打開和關閉檔案,不進行任何讀寫操作。
2.1.1 打開
在python,使用open函數,可以打開一個已經存在的檔案,或者建立一個新檔案,文法如下:
open(name, mode)
name:是要打開的目标檔案名的字元串(可以包含檔案所在的具體路徑)。
mode:設定打開檔案的模式(通路模式):隻讀、寫入、追加等。
2.1.1.1 打開檔案模式
模式 | 描述 |
r | 以隻讀方式打開檔案。檔案的指針将會放在檔案的開頭。這是預設模式。 |
rb | 以二進制格式打開一個檔案用于隻讀。檔案指針将會放在檔案的開頭。這是預設模式。 |
r+ | 打開一個檔案用于讀寫。檔案指針将會放在檔案的開頭。 |
rb+ | 以二進制格式打開一個檔案用于讀寫。檔案指針将會放在檔案的開頭。 |
w | 打開一個檔案隻用于寫入。如果該檔案已存在則打開檔案,并從開頭開始編輯,即原有内容會被删除。如果該檔案不存在,建立新檔案。 |
wb | 以二進制格式打開一個檔案隻用于寫入。如果該檔案已存在則打開檔案,并從開頭開始編輯,即原有内容會被删除。如果該檔案不存在,建立新檔案。 |
w+ | 打開一個檔案用于讀寫。如果該檔案已存在則打開檔案,并從開頭開始編輯,即原有内容會被删除。如果該檔案不存在,建立新檔案。 |
wb+ | 以二進制格式打開一個檔案用于讀寫。如果該檔案已存在則打開檔案,并從開頭開始編輯,即原有内容會被删除。如果該檔案不存在,建立新檔案。 |
a | 打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。也就是說,新的内容将會被寫入到已有内容之後。如果該檔案不存在,建立新檔案進行寫入。 |
ab | 以二進制格式打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。也就是說,新的内容将會被寫入到已有内容之後。如果該檔案不存在,建立新檔案進行寫入。 |
a+ | 打開一個檔案用于讀寫。如果該檔案已存在,檔案指針将會放在檔案的結尾。檔案打開時會是追加模式。如果該檔案不存在,建立新檔案用于讀寫。 |
ab+ | 以二進制格式打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。如果該檔案不存在,建立新檔案用于讀寫。 |
2.1.1.2 快速體驗
f = open('test.txt', 'w')
注意:此時的是
f
函數的檔案對象。
open
2.1.2 檔案對象方法
2.1.2.1 寫
- 文法
對象對象.write('内容')
- 體驗
# 1. 打開檔案
f = open('test.txt', 'w')
# 2.檔案寫入
f.write('hello world')
# 3. 關閉檔案
f.close()
注意:
-
和
w
模式:如果檔案不存在則建立該檔案;如果檔案存在,
a
模式先清空再寫入,
w
模式直接末尾追加。
a
-
模式:如果檔案不存在則報錯。
r
2.1.2.2 讀
- read()
檔案對象.read(num)
num表示要從檔案中讀取的資料的長度(機關是位元組),如果沒有傳入num,那麼就表示讀取檔案中所有的資料。
- readlines()
readlines可以按照行的方式把整個檔案中的内容進行一次性讀取,并且傳回的是一個清單,其中每一行的資料為一個元素。
f = open('test.txt')
content = f.readlines()
# ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']
print(content)
# 關閉檔案
f.close()
- readline()
readline()一次讀取一行内容。
f = open('test.txt')
content = f.readline()
print(f'第一行:{content}')
content = f.readline()
print(f'第二行:{content}')
# 關閉檔案
f.close()
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-ovfPLa7Z-1597498951218)(檔案操作.assets/image-20190222105332438.png)]
2.1.2.3 seek()
作用:用來移動檔案指針。
文法如下:
檔案對象.seek(偏移量, 起始位置)
起始位置:
- 0:檔案開頭
- 1:目前位置
- 2:檔案結尾
2.1.3 關閉
檔案對象.close()
三. 檔案備份
需求:使用者輸入目前目錄下任意檔案名,程式完成對該檔案的備份功能(備份檔案名為xx[備份]字尾,例如:test[備份].txt)。
3.1 步驟
- 接收使用者輸入的檔案名
- 規劃備份檔案名
- 備份檔案寫入資料
3.2 代碼實作
- 接收使用者輸入目标檔案名
old_name = input('請輸入您要備份的檔案名:')
-
規劃備份檔案名
2.1 提取目标檔案字尾
2.2 組織備份的檔案名,xx[備份]字尾
# 2.1 提取檔案字尾點的下标
index = old_name.rfind('.')
# print(index) # 字尾中.的下标
# print(old_name[:index]) # 源檔案名(無字尾)
# 2.2 組織新檔案名 舊檔案名 + [備份] + 字尾
new_name = old_name[:index] + '[備份]' + old_name[index:]
# 列印新檔案名(帶字尾)
# print(new_name)
-
備份檔案寫入資料
3.1 打開源檔案 和 備份檔案
3.2 将源檔案資料寫入備份檔案
3.3 關閉檔案
# 3.1 打開檔案
old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')
# 3.2 将源檔案資料寫入備份檔案
while True:
con = old_f.read(1024)
if len(con) == 0:
break
new_f.write(con)
# 3.3 關閉檔案
old_f.close()
new_f.close()
3.3 思考
如果使用者輸入
.txt
,這是一個無效檔案,程式如何更改才能限制隻有有效的檔案名才能備份?
答:添加條件判斷即可。
old_name = input('請輸入您要備份的檔案名:')
index = old_name.rfind('.')
if index > 0:
postfix = old_name[index:]
new_name = old_name[:index] + '[備份]' + postfix
old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')
while True:
con = old_f.read(1024)
if len(con) == 0:
break
new_f.write(con)
old_f.close()
new_f.close()
四. 檔案和檔案夾的操作
- 導入os子產品
import
- 使用
子產品相關功能os
os.函數名()
4.1 檔案重命名
os.rename(目标檔案名, 新檔案名)
4.2 删除檔案
os.remove(目标檔案名)
4.3 建立檔案夾
os.mkdir(檔案夾名字)
4.4 删除檔案夾
os.rmdir(檔案夾名字)
4.5 擷取目前目錄
os.getcwd()
4.6 改變預設目錄
os.chdir(目錄)
4.7 擷取目錄清單
os.listdir(目錄)
五.應用案例
- 步驟
- 設定添加删除字元串的的辨別
- 擷取指定目錄的所有檔案
- 将原有檔案名添加/删除指定字元串,構造新名字
- os.rename()重命名
- 代碼
import os
# 設定重命名辨別:如果為1則添加指定字元,flag取值為2則删除指定字元
flag = 1
# 擷取指定目錄
dir_name = './'
# 擷取指定目錄的檔案清單
file_list = os.listdir(dir_name)
# print(file_list)
# 周遊檔案清單内的檔案
for name in file_list:
# 添加指定字元
if flag == 1:
new_name = 'Python-' + name
# 删除指定字元
elif flag == 2:
num = len('Python-')
new_name = name[num:]
# 列印新檔案名,測試程式正确性
print(new_name)
# 重命名
os.rename(dir_name+name, dir_name+new_name)
六. 總結
- 檔案操作步驟
- 打開
檔案對象 = open(目标檔案, 通路模式)
- 操作
- 讀
檔案對象.read()
檔案對象.readlines()
檔案對象.readline()
- 寫
檔案對象.write()
- seek()
- 關閉
檔案對象.close()
- 主通路模式
- w:寫,檔案不存在則建立該檔案
- r:讀,檔案不存在則報錯
- a:追加
- 檔案和檔案夾操作
- 重命名:os.rename()
- 擷取目前目錄:os.getcwd()
- 擷取目錄清單:os.listdir()