Python標(biāo)準(zhǔn)庫shutil用法實(shí)例詳解
本文實(shí)例講述了Python標(biāo)準(zhǔn)庫shutil用法。分享給大家供大家參考,具體如下:
shutil模塊提供了許多關(guān)于文件和文件集合的高級(jí)操作,特別提供了支持文件復(fù)制和刪除的功能。
文件夾與文件操作
copyfileobj(fsrc, fdst, length=16*1024): 將fsrc文件內(nèi)容復(fù)制至fdst文件,length為fsrc每次讀取的長(zhǎng)度,用做緩沖區(qū)大小
- fsrc: 源文件
- fdst: 復(fù)制至fdst文件
- length: 緩沖區(qū)大小,即fsrc每次讀取的長(zhǎng)度
import shutil f1 = open("file.txt","r") f2 = open("file_copy.txt","a+") shutil.copyfileobj(f1,f2,length=1024)
copyfile(src, dst): 將src文件內(nèi)容復(fù)制至dst文件
- src: 源文件路徑
- dst: 復(fù)制至dst文件,若dst文件不存在,將會(huì)生成一個(gè)dst文件;若存在將會(huì)被覆蓋
- follow_symlinks:設(shè)置為True時(shí),若src為軟連接,則當(dāng)成文件復(fù)制;如果設(shè)置為False,復(fù)制軟連接。默認(rèn)為True。Python3新增參數(shù)
import shutil shutil.copyfile("file.txt","file_copy.txt")
copymode(src, dst): 將src文件權(quán)限復(fù)制至dst文件。文件內(nèi)容,所有者和組不受影響
- src: 源文件路徑
- dst: 將權(quán)限復(fù)制至dst文件,dst路徑必須是真實(shí)的路徑,并且文件必須存在,否則將會(huì)報(bào)文件找不到錯(cuò)誤
- follow_symlinks:設(shè)置為False時(shí),src, dst皆為軟連接,可以復(fù)制軟連接權(quán)限,如果設(shè)置為True,則當(dāng)成普通文件復(fù)制權(quán)限。默認(rèn)為True。Python3新增參數(shù)
import shutil shutil.copymode("file.txt","file_copy.txt")
copystat(src, dst): 將權(quán)限,上次訪問時(shí)間,上次修改時(shí)間以及src的標(biāo)志復(fù)制到dst。文件內(nèi)容,所有者和組不受影響
- src: 源文件路徑
- dst: 將權(quán)限復(fù)制至dst文件,dst路徑必須是真實(shí)的路徑,并且文件必須存在,否則將會(huì)報(bào)文件找不到錯(cuò)誤
- follow_symlinks:設(shè)置為False時(shí),src, dst皆為軟連接,可以復(fù)制軟連接權(quán)限、上次訪問時(shí)間,上次修改時(shí)間以及src的標(biāo)志,如果設(shè)置為True,則當(dāng)成普通文件復(fù)制權(quán)限。默認(rèn)為True。Python3新增參數(shù)
import shutil shutil.copystat("file.txt","file_copy.txt")
copy(src, dst): 將文件src復(fù)制至dst。dst可以是個(gè)目錄,會(huì)在該目錄下創(chuàng)建與src同名的文件,若該目錄下存在同名文件,將會(huì)報(bào)錯(cuò)提示已經(jīng)存在同名文件。權(quán)限會(huì)被一并復(fù)制。本質(zhì)是先后調(diào)用了copyfile與copymode而已
- src:源文件路徑
- dst:復(fù)制至dst文件夾或文件
- follow_symlinks:設(shè)置為False時(shí),src, dst皆為軟連接,可以復(fù)制軟連接權(quán)限,如果設(shè)置為True,則當(dāng)成普通文件復(fù)制權(quán)限。默認(rèn)為True。Python3新增參數(shù)
improt shutil,os shutil.copy("file.txt","file_copy.txt") # 或者 shutil.copy("file.txt",os.path.join(os.getcwd(),"copy"))
copy2(src, dst): 將文件src復(fù)制至dst。dst可以是個(gè)目錄,會(huì)在該目錄下創(chuàng)建與src同名的文件,若該目錄下存在同名文件,將會(huì)報(bào)錯(cuò)提示已經(jīng)存在同名文件。權(quán)限、上次訪問時(shí)間、上次修改時(shí)間和src的標(biāo)志會(huì)一并復(fù)制至dst。本質(zhì)是先后調(diào)用了copyfile與copystat方法而已
- src:源文件路徑
- dst:復(fù)制至dst文件夾或文件
- follow_symlinks:設(shè)置為False時(shí),src, dst皆為軟連接,可以復(fù)制軟連接權(quán)限、上次訪問時(shí)間,上次修改時(shí)間以及src的標(biāo)志,如果設(shè)置為True,則當(dāng)成普通文件復(fù)制權(quán)限。默認(rèn)為True。Python3新增參數(shù)
improt shutil,os shutil.copy2("file.txt","file_copy.txt") # 或者 shutil.copy2("file.txt",os.path.join(os.getcwd(),"copy"))
ignore_patterns(*patterns): 忽略模式,用于配合copytree()
方法,傳遞文件將會(huì)被忽略,不會(huì)被拷貝
- patterns:文件名稱,元組
copytree(src, dst, symlinks=False, ignore=None): 拷貝文檔樹,將src文件夾里的所有內(nèi)容拷貝至dst文件夾
- src:源文件夾
- dst:復(fù)制至dst文件夾,該文件夾會(huì)自動(dòng)創(chuàng)建,需保證此文件夾不存在,否則將報(bào)錯(cuò)
- symlinks:是否復(fù)制軟連接,True復(fù)制軟連接,F(xiàn)alse不復(fù)制,軟連接會(huì)被當(dāng)成文件復(fù)制過來,默認(rèn)False
- ignore:忽略模式,可傳入
ignore_patterns()
- copy_function:拷貝文件的方式,可以傳入一個(gè)可執(zhí)行的處理函數(shù),默認(rèn)為copy2,Python3新增參數(shù)
- ignore_dangling_symlinks:sysmlinks設(shè)置為False時(shí),拷貝指向文件已刪除的軟連接時(shí),將會(huì)報(bào)錯(cuò),如果想消除這個(gè)異常,可以設(shè)置此值為True。默認(rèn)為False,Python3新增參數(shù)
import shutil,os folder1 = os.path.join(os.getcwd(),"aaa") # bbb與ccc文件夾都可以不存在,會(huì)自動(dòng)創(chuàng)建 folder2 = os.path.join(os.getcwd(),"bbb","ccc") # 將"abc.txt","bcd.txt"忽略,不復(fù)制 shutil.copytree(folder1,folder2,ignore=shutil.ignore_patterns("abc.txt","bcd.txt")
rmtree(path, ignore_errors=False, onerror=None): 移除文檔樹,將文件夾目錄刪除
- ignore_errors:是否忽略錯(cuò)誤,默認(rèn)False
- onerror:定義錯(cuò)誤處理函數(shù),需傳遞一個(gè)可執(zhí)行的處理函數(shù),該處理函數(shù)接收三個(gè)參數(shù):函數(shù)、路徑和excinfo
import shutil,os folder1 = os.path.join(os.getcwd(),"aaa") shutil.rmtree(folder1)
move(src, dst): 將src移動(dòng)至dst目錄下。若dst目錄不存在,則效果等同于src改名為dst。若dst目錄存在,將會(huì)把src文件夾的所有內(nèi)容移動(dòng)至該目錄下面
- src:源文件夾或文件
- dst:移動(dòng)至dst文件夾,或?qū)⑽募拿麨閐st文件。如果src為文件夾,而dst為文件將會(huì)報(bào)錯(cuò)
- copy_function:拷貝文件的方式,可以傳入一個(gè)可執(zhí)行的處理函數(shù)。默認(rèn)為copy2,Python3新增參數(shù)
import shutil,os # 示例一,將src文件夾移動(dòng)至dst文件夾下面,如果bbb文件夾不存在,則變成了重命名操作 folder1 = os.path.join(os.getcwd(),"aaa") folder2 = os.path.join(os.getcwd(),"bbb") shutil.move(folder1, folder2) # 示例二,將src文件移動(dòng)至dst文件夾下面,如果bbb文件夾不存在,則變成了重命名操作 file1 = os.path.join(os.getcwd(),"aaa.txt") folder2 = os.path.join(os.getcwd(),"bbb") shutil.move(file1, folder2) # 示例三,將src文件重命名為dst文件(dst文件存在,將會(huì)覆蓋) file1 = os.path.join(os.getcwd(),"aaa.txt") file2 = os.path.join(os.getcwd(),"bbb.txt") shutil.move(file1, file2)
disk_usage(path): 獲取當(dāng)前目錄所在硬盤使用情況。Python3新增方法
- path:文件夾或文件路徑。windows中必須是文件夾路徑,在linux中可以是文件路徑和文件夾路徑
import shutil.os path = os.path.join(os.getcwd(),"aaa") info = shutil.disk_usage(path) print(info) # usage(total=95089164288, used=7953104896, free=87136059392)
chown(path, user=None, group=None): 修改路徑指向的文件或文件夾的所有者或分組。Python3新增方法
- path:路徑
- user:所有者,傳遞user的值必須是真實(shí)的,否則將報(bào)錯(cuò)no such user
- group:分組,傳遞group的值必須是真實(shí)的,否則將報(bào)錯(cuò)no such group
import shutil,os path = os.path.join(os.getcwd(),"file.txt") shutil.chown(path,user="root",group="root")
which(cmd, mode=os.F_OK | os.X_OK, path=None): 獲取給定的cmd命令的可執(zhí)行文件的路徑。Python3新增方法
import shutil info = shutil.which("python3") print(info) # /usr/bin/python3
歸檔操作
shutil還提供了創(chuàng)建和讀取壓縮和存檔文件的高級(jí)使用程序。內(nèi)部實(shí)現(xiàn)主要依靠的是zipfile和tarfile模塊
make_archive(base_name, format, root_dir, …): 生成壓縮文件
- base_name:壓縮文件的文件名,不允許有擴(kuò)展名,因?yàn)闀?huì)根據(jù)壓縮格式生成相應(yīng)的擴(kuò)展名
- format:壓縮格式
- root_dir:將制定文件夾進(jìn)行壓縮
import shutil,os base_name = os.path.join(os.getcwd(),"aaa") format = "zip" root_dir = os.path.join(os.getcwd(),"aaa") # 將會(huì)root_dir文件夾下的內(nèi)容進(jìn)行壓縮,生成一個(gè)aaa.zip文件 shutil.make_archive(base_name, format, root_dir)
get_archive_formats(): 獲取支持的壓縮文件格式。目前支持的有:tar、zip、gztar、bztar。在Python3還多支持一種格式xztar
unpack_archive(filename, extract_dir=None, format=None): 解壓操作。Python3新增方法
- filename:文件路徑
- extract_dir:解壓至的文件夾路徑。文件夾可以不存在,會(huì)自動(dòng)生成
- format:解壓格式,默認(rèn)為None,會(huì)根據(jù)擴(kuò)展名自動(dòng)選擇解壓格式
import shutil,os zip_path = os.path.join(os.getcwd(),"aaa.zip") extract_dir = os.path.join(os.getcwd(),"aaa") shutil.unpack_archive(zip_path, extract_dir)
get_unpack_formats(): 獲取支持的解壓文件格式。目前支持的有:tar、zip、gztar、bztar和xztar。Python3新增方法
關(guān)于shutil的更多操作:https://docs.python.org/3/library/shutil.html
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python文件與目錄操作技巧匯總》、《Python文本文件操作技巧匯總》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python中Parser的超詳細(xì)用法實(shí)例
Parser模塊為Python的內(nèi)部解析器和字節(jié)碼編譯器提供了一個(gè)接口,該接口的主要目的是允許Python代碼編輯Python表達(dá)式的分析樹并從中創(chuàng)建可執(zhí)行代碼,這篇文章主要給大家介紹了關(guān)于Python中Parser超詳細(xì)用法的相關(guān)資料,需要的朋友可以參考下2022-07-07python實(shí)現(xiàn)兩個(gè)一維列表合并成一個(gè)二維列表
今天小編就為大家分享一篇python實(shí)現(xiàn)兩個(gè)一維列表合并成一個(gè)二維列表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python內(nèi)置方法和屬性應(yīng)用:反射和單例(推薦)
這篇文章主要介紹了Python內(nèi)置方法和屬性應(yīng)用:反射和單例,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06用Python編寫個(gè)解釋器實(shí)現(xiàn)方法接受
計(jì)算機(jī)只能理解機(jī)器碼。歸根結(jié)底,編程語言只是一串文字,目的是為了讓人類更容易編寫他們想讓計(jì)算機(jī)做的事情。真正的魔法是由編譯器和解釋器完成,它們彌合了兩者之間的差距。解釋器逐行讀取代碼并將其轉(zhuǎn)換為機(jī)器碼2023-01-01python實(shí)戰(zhàn)之實(shí)現(xiàn)excel讀取、統(tǒng)計(jì)、寫入的示例講解
下面小編就為大家分享一篇python實(shí)戰(zhàn)之實(shí)現(xiàn)excel讀取、統(tǒng)計(jì)、寫入的示例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05flask框架實(shí)現(xiàn)修改密碼和免密登錄功能
flask是python web開發(fā)的常用框架之一。本文將講述flask如何實(shí)現(xiàn)修改密碼和免密登錄功能2021-05-05