目標(biāo)
- 文件操作的作用
- 文件的基本操作
- 打開(kāi)
- 讀寫(xiě)
- 關(guān)閉
- 文件備份
- 文件和文件夾的操作
一. 文件操作的作用
思考:什么是文件?
思考:文件操作包含什么?
答:打開(kāi)、關(guān)閉、讀、寫(xiě)、復(fù)制....
思考:文件操作的的作用是什么?
答:讀取內(nèi)容、寫(xiě)入內(nèi)容、備份內(nèi)容......
總結(jié):文件操作的作用就是==把一些內(nèi)容(數(shù)據(jù))存儲(chǔ)存放起來(lái),可以讓程序下一次執(zhí)行的時(shí)候直接使用,而不必重新制作一份,省時(shí)省力==。
二. 文件的基本操作
2.1 文件操作步驟
- 打開(kāi)文件
- 讀寫(xiě)等操作
- 關(guān)閉文件
注意:可以只打開(kāi)和關(guān)閉文件,不進(jìn)行任何讀寫(xiě)操作。
2.1.1 打開(kāi)
在python,使用open函數(shù),可以打開(kāi)一個(gè)已經(jīng)存在的文件,或者創(chuàng)建一個(gè)新文件,語(yǔ)法如下:
open(name, mode)
name:是要打開(kāi)的目標(biāo)文件名的字符串(可以包含文件所在的具體路徑)。
mode:設(shè)置打開(kāi)文件的模式(訪(fǎng)問(wèn)模式):只讀、寫(xiě)入、追加等。
2.1.1.1 打開(kāi)文件模式
| 模式 | 描述 |
|---|---|
| r | 以只讀方式打開(kāi)文件。文件的指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。 |
| rb | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。 |
| r+ | 打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭。 |
| rb+ | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭。 |
| w | 打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。 |
| wb | 以二進(jìn)制格式打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。 |
| w+ | 打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。 |
| wb+ | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。 |
| a | 打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。 |
| ab | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。 |
| a+ | 打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。文件打開(kāi)時(shí)會(huì)是追加模式。如果該文件不存在,創(chuàng)建新文件用于讀寫(xiě)。 |
| ab+ | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。如果該文件不存在,創(chuàng)建新文件用于讀寫(xiě)。 |
2.1.1.2 快速體驗(yàn)
f = open('test.txt', 'w')
注意:此時(shí)的
f是open函數(shù)的文件對(duì)象。
2.1.2 文件對(duì)象方法
2.1.2.1 寫(xiě)
- 語(yǔ)法
對(duì)象對(duì)象.write('內(nèi)容')
- 體驗(yàn)
# 1. 打開(kāi)文件
f = open('test.txt', 'w')
# 2.文件寫(xiě)入
f.write('hello world')
# 3. 關(guān)閉文件
f.close()
注意:
w和a模式:如果文件不存在則創(chuàng)建該文件;如果文件存在,w模式先清空再寫(xiě)入,a模式直接末尾追加。r模式:如果文件不存在則報(bào)錯(cuò)。
2.1.2.2 讀
- read()
文件對(duì)象.read(num)
num表示要從文件中讀取的數(shù)據(jù)的長(zhǎng)度(單位是字節(jié)),如果沒(méi)有傳入num,那么就表示讀取文件中所有的數(shù)據(jù)。
- readlines()
readlines可以按照行的方式把整個(gè)文件中的內(nèi)容進(jìn)行一次性讀取,并且返回的是一個(gè)列表,其中每一行的數(shù)據(jù)為一個(gè)元素。
f = open('test.txt')
content = f.readlines()
# ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']
print(content)
# 關(guān)閉文件
f.close()
- readline()
readline()一次讀取一行內(nèi)容。
f = open('test.txt')
content = f.readline()
print(f'第一行:{content}')
content = f.readline()
print(f'第二行:{content}')
# 關(guān)閉文件
f.close()
2.1.2.3 seek()
作用:用來(lái)移動(dòng)文件指針。
語(yǔ)法如下:
文件對(duì)象.seek(偏移量, 起始位置)
起始位置:
- 0:文件開(kāi)頭
- 1:當(dāng)前位置
- 2:文件結(jié)尾
2.1.3 關(guān)閉
文件對(duì)象.close()
三. 文件備份
需求:用戶(hù)輸入當(dāng)前目錄下任意文件名,程序完成對(duì)該文件的備份功能(備份文件名為xx[備份]后綴,例如:test[備份].txt)。
3.1 步驟
- 接收用戶(hù)輸入的文件名
- 規(guī)劃備份文件名
- 備份文件寫(xiě)入數(shù)據(jù)
3.2 代碼實(shí)現(xiàn)
- 接收用戶(hù)輸入目標(biāo)文件名
old_name = input('請(qǐng)輸入您要備份的文件名:')
-
規(guī)劃備份文件名
2.1 提取目標(biāo)文件后綴
2.2 組織備份的文件名,xx[備份]后綴
# 2.1 提取文件后綴點(diǎn)的下標(biāo)
index = old_name.rfind('.')
# print(index) # 后綴中.的下標(biāo)
# print(old_name[:index]) # 源文件名(無(wú)后綴)
# 2.2 組織新文件名 舊文件名 + [備份] + 后綴
new_name = old_name[:index] + '[備份]' + old_name[index:]
# 打印新文件名(帶后綴)
# print(new_name)
-
備份文件寫(xiě)入數(shù)據(jù)
3.1 打開(kāi)源文件 和 備份文件
3.2 將源文件數(shù)據(jù)寫(xiě)入備份文件
3.3 關(guān)閉文件
# 3.1 打開(kāi)文件
old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')
# 3.2 將源文件數(shù)據(jù)寫(xiě)入備份文件
while True:
con = old_f.read(1024)
if len(con) == 0:
break
new_f.write(con)
# 3.3 關(guān)閉文件
old_f.close()
new_f.close()
3.3 思考
如果用戶(hù)輸入.txt,這是一個(gè)無(wú)效文件,程序如何更改才能限制只有有效的文件名才能備份?
答:添加條件判斷即可。
old_name = input('請(qǐng)輸入您要備份的文件名:')
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()
四. 文件和文件夾的操作
在Python中文件和文件夾的操作要借助os模塊里面的相關(guān)功能,具體步驟如下:
- 導(dǎo)入os模塊
import os
- 使用
os模塊相關(guān)功能
os.函數(shù)名()
4.1 文件重命名
os.rename(目標(biāo)文件名, 新文件名)
4.2 刪除文件
os.remove(目標(biāo)文件名)
4.3 創(chuàng)建文件夾
os.mkdir(文件夾名字)
4.4 刪除文件夾
os.rmdir(文件夾名字)
4.5 獲取當(dāng)前目錄
os.getcwd()
4.6 改變默認(rèn)目錄
os.chdir(目錄)
4.7 獲取目錄列表
os.listdir(目錄)
五.應(yīng)用案例
需求:批量修改文件名,既可添加指定字符串,又能刪除指定字符串。
- 步驟
- 設(shè)置添加刪除字符串的的標(biāo)識(shí)
- 獲取指定目錄的所有文件
- 將原有文件名添加/刪除指定字符串,構(gòu)造新名字
- os.rename()重命名
- 代碼
import os
# 設(shè)置重命名標(biāo)識(shí):如果為1則添加指定字符,flag取值為2則刪除指定字符
flag = 1
# 獲取指定目錄
dir_name = './'
# 獲取指定目錄的文件列表
file_list = os.listdir(dir_name)
# print(file_list)
# 遍歷文件列表內(nèi)的文件
for name in file_list:
# 添加指定字符
if flag == 1:
new_name = 'Python-' + name
# 刪除指定字符
elif flag == 2:
num = len('Python-')
new_name = name[num:]
# 打印新文件名,測(cè)試程序正確性
print(new_name)
# 重命名
os.rename(dir_name+name, dir_name+new_name)
六. 總結(jié)
-
文件操作步驟
- 打開(kāi)
文件對(duì)象 = open(目標(biāo)文件, 訪(fǎng)問(wèn)模式)-
操作
- 讀
文件對(duì)象.read() 文件對(duì)象.readlines() 文件對(duì)象.readline()- 寫(xiě)
文件對(duì)象.write()- seek()
關(guān)閉
文件對(duì)象.close()
-
主訪(fǎng)問(wèn)模式
- w:寫(xiě),文件不存在則新建該文件
- r:讀,文件不存在則報(bào)錯(cuò)
- a:追加
-
文件和文件夾操作
- 重命名:os.rename()
- 獲取當(dāng)前目錄:os.getcwd()
- 獲取目錄列表:os.listdir()