python模塊shutil函數(shù)應(yīng)用示例詳解教程
本文大綱
os模塊是Python標(biāo)準(zhǔn)庫(kù)中一個(gè)重要的模塊,里面提供了對(duì)目錄和文件的一般常用操作。而Python另外一個(gè)標(biāo)準(zhǔn)庫(kù)——shutil庫(kù),它作為os模塊的補(bǔ)充,提供了復(fù)制、移動(dòng)、刪除、壓縮、解壓等操作,這些 os 模塊中一般是沒(méi)有提供的。但是需要注意的是:shutil 模塊對(duì)壓縮包的處理是調(diào)用 ZipFile 和 TarFile這兩個(gè)模塊來(lái)進(jìn)行的。

知識(shí)串講
本文所使用的素材,都是基于以下2個(gè)文件夾,其中一個(gè)文件夾為空。

1)模塊導(dǎo)入
import shutil
2)復(fù)制文件
函數(shù):shutil.copy(src,dst)含義:復(fù)制文件;參數(shù):src表示源文件,dst表示目標(biāo)文件夾;注意:當(dāng)移動(dòng)到一個(gè)不存在的“目標(biāo)文件夾”,系統(tǒng)會(huì)將這個(gè)不存在的“目標(biāo)文件夾”識(shí)別為新的文件夾,而不會(huì)報(bào)錯(cuò);
# 1.將a表的“data.txt”移動(dòng)到b表 src = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_a\data.txt" dst = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_b" shutil.copy(src,dst) ------------------------------------------------------------ # 2.將a表的“data.txt”移動(dòng)到b表,并重新命名為“new_data.txt” src = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_a\data.txt" dst = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_b\new_data.txt" shutil.copy(src,dst) ------------------------------------------------------------ # 3.將a表的“data.txt”移動(dòng)到“不存在”的文件夾 src = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_a\data.txt" dst = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_c" shutil.copy(src,dst) """ 注意:對(duì)于情況3,系統(tǒng)會(huì)默認(rèn)將“test_shutil_c”識(shí)別為文件名,而不是按照我們認(rèn)為的,移動(dòng)到一個(gè)新的不存在的文件夾。 """
結(jié)果如下:

3)復(fù)制文件夾
函數(shù):shutil.copytree(src,dst)
含義:復(fù)制文件夾;
參數(shù):src表示源文件夾,dst表示目標(biāo)文件夾;
注意:這里只能是移動(dòng)到一個(gè)空文件夾,而不能是包含其他文件的非空文件夾,否則會(huì)報(bào)錯(cuò)PermissionError;
① 如果目標(biāo)文件夾中存在其他文件,會(huì)報(bào)錯(cuò);
# 將a文件夾移動(dòng)到b文件夾,由于前面的操作,此時(shí)b文件夾中已經(jīng)有其他文件 src = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_a" dst = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_b" shutil.copytree(src,dst)
結(jié)果如下:

② 如果指定任意一個(gè)目標(biāo)文件夾,則會(huì)自動(dòng)創(chuàng)建;
# c文件夾原本是不存在的,我們使用了下方的代碼,會(huì)自動(dòng)創(chuàng)建該文件夾 src = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_a" dst = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_c" shutil.copytree(src,dst)
結(jié)果如下:

4)移動(dòng)文件或文件夾
函數(shù):shutil.move(src,dst)
含義:移動(dòng)文件/文件夾;
參數(shù):src表示源文件/文件夾,dst表示目標(biāo)文件夾;
注意:文件/文件夾一旦被移動(dòng)了,原來(lái)位置的文件/文件夾就沒(méi)了。目標(biāo)文件夾不存在時(shí),會(huì)報(bào)錯(cuò);
# 將當(dāng)前工作目錄下的“a.xlsx”文件,移動(dòng)到a文件夾下
dst = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_a"
shutil.move("a.xlsx",dst)
----------------------------------------------------------------
# 將a文件夾下的“a.xlsx”文件,移動(dòng)到b文件夾中,并重新命名為“aa.xlsx”
src = r"C:/Users/黃偉/Desktop/publish/os模塊/test_shutil_a\a.xlsx"
dst = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_b\aa.xlsx"
shutil.move(src,dst)
結(jié)果如下:

注意:移動(dòng)文件夾操作類似,我這里就不贅述了,自行下去學(xué)習(xí)。
5)刪除文件夾(慎用)
函數(shù):shutil.rmtree(src)
含義:刪除文件夾;
參數(shù):src表示源文件夾;
注意:區(qū)別這里和os模塊中remove()、rmdir()的用法,remove()方法只能刪除某個(gè)文件,mdir()只能刪除某個(gè)空文件夾。但是shutil模塊中的rmtree()可以遞歸徹底刪除非空文件夾;
# 將c文件夾徹底刪除 src = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_c" shutil.rmtree(src)
結(jié)果如下:

6)創(chuàng)建和解壓壓縮包
zipobj.write():創(chuàng)建一個(gè)壓縮包;
zipobj.namelist():讀取壓縮包中的文件信息;
zipobj.extract():將壓縮包中的單個(gè)文件,解壓出來(lái);
zipobj.extractall():將壓縮包中所有文件,解壓出來(lái);
shutil 模塊對(duì)壓縮包的處理是調(diào)用 ZipFile 和 TarFile這兩個(gè)模塊來(lái)進(jìn)行的,因此需要導(dǎo)入這兩個(gè)模塊;
注意:這里所說(shuō)的壓縮包,指的是“.zip”格式的壓縮包;
① 創(chuàng)建一個(gè)壓縮包
import zipfile
import os
file_list = os.listdir(os.getcwd())
# 將上述所有文件,進(jìn)行打包,使用“w”
with zipfile.ZipFile(r"我創(chuàng)建的壓縮包.zip", "w") as zipobj:
for file in file_list:
zipobj.write(file)
結(jié)果如下:

② 讀取壓縮包中的文件信息
import zipfile
with zipfile.ZipFile("我創(chuàng)建的壓縮包.zip", "r") as zipobj:
print(zipobj.namelist())
結(jié)果如下:

③ 將壓縮包中的單個(gè)文件,解壓出來(lái) 注意:目標(biāo)文件夾不存在,會(huì)自動(dòng)創(chuàng)建;
import zipfile
# 將壓縮包中的“test.ipynb”文件,單獨(dú)解壓到a文件夾下
dst = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_a"
with zipfile.ZipFile("我創(chuàng)建的壓縮包.zip", "r") as zipobj:
zipobj.extract("test.ipynb",dst)
結(jié)果如下:

④ 將壓縮包中所有文件,解壓出來(lái); 注意:目標(biāo)文件夾不存在,會(huì)自動(dòng)創(chuàng)建;
import zipfile
# 將壓縮包中的所有文件,解壓到d文件夾下
dst = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_d"
with zipfile.ZipFile("我創(chuàng)建的壓縮包.zip", "r") as zipobj:
zipobj.extractall(dst)
結(jié)果如下:

以上就是python模塊shutil函數(shù)應(yīng)用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于python模塊shutil函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python通過(guò)future處理并發(fā)問(wèn)題
這篇文章主要介紹了Python通過(guò)future處理并發(fā)問(wèn)題,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-10-10
Python腳本實(shí)現(xiàn)集群檢測(cè)和管理功能
這篇文章主要介紹了Python腳本實(shí)現(xiàn)集群檢測(cè)和管理功能,本文講解了實(shí)現(xiàn)想法、開(kāi)發(fā)工具選擇、經(jīng)驗(yàn)分享、代碼示例等內(nèi)容,需要的朋友可以參考下2015-03-03
Python實(shí)現(xiàn)提取谷歌音樂(lè)搜索結(jié)果的方法
這篇文章主要介紹了Python實(shí)現(xiàn)提取谷歌音樂(lè)搜索結(jié)果的方法,涉及Python針對(duì)谷歌音樂(lè)相關(guān)信息的獲取技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
利用Python通過(guò)獲取剪切板數(shù)據(jù)實(shí)現(xiàn)百度劃詞搜索功能
大家是不是嫌棄每次打開(kāi)百度太麻煩?今天教大家利用Python通過(guò)獲取剪切板數(shù)據(jù)實(shí)現(xiàn)百度劃詞搜索功能,用程序直接打開(kāi)網(wǎng)頁(yè),需要的朋友可以參考下2021-06-06
Python深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)殘差塊
這篇文章主要為大家介紹了Python深度學(xué)習(xí)中的神經(jīng)網(wǎng)絡(luò)殘差塊示例詳解有需要的 朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
成功解決ValueError:?Supported?target?types?are:('binary
本文給大家分享成功解決ValueError:?Supported?target?types?are:('binary',?'multiclass').?Got?'continuous'?instead.的錯(cuò)誤問(wèn)題,需要的朋友可以參考下2023-03-03
python實(shí)現(xiàn)MySQL?數(shù)據(jù)庫(kù)表格創(chuàng)建?數(shù)據(jù)插入及獲取插入ID操作教程
這篇文章主要為大家介紹了python實(shí)現(xiàn)MySQL?數(shù)據(jù)庫(kù)表格創(chuàng)建?數(shù)據(jù)插入及獲取插入ID操作教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11

