Python里shutil模塊 高階文件操作shutil的移動(dòng)復(fù)制歸檔功能

shutil模塊提供移動(dòng)、復(fù)制、打包文件等高階操作。1.移動(dòng)用shutil.move(),可重命名或覆蓋文件;2.復(fù)制單個(gè)文件用shutil.copy(),保留內(nèi)容和權(quán)限,復(fù)制目錄用shutil.copytree(),目標(biāo)路徑不可存在;3.打包用shutil.make_archive(),支持zip/tar格式,解壓用shutil.unpack_archive();4.其他功能包括刪除目錄shutil.rmtree()、查找命令shutil.which()、查看磁盤使用shutil.disk_usage(),使用時(shí)注意測(cè)試防止誤刪。

python 中處理文件和目錄時(shí),除了基本的讀寫(xiě)操作,有時(shí)候還需要進(jìn)行移動(dòng)、復(fù)制甚至打包歸檔等操作。這時(shí)候 shutil 模塊就派上用場(chǎng)了。它提供了很多方便的函數(shù),讓你能輕松完成這些“高階”文件操作。


移動(dòng)文件或目錄:shutil.move()

如果你需要把一個(gè)文件或者整個(gè)目錄從一個(gè)地方挪到另一個(gè)地方,shutil.move() 就是你的首選。

這個(gè)函數(shù)的行為很像系統(tǒng)里的“剪切+粘貼”,使用起來(lái)也非常簡(jiǎn)單:

import shutil shutil.move('source_folder/file.txt', 'target_folder/')
  • 如果目標(biāo)路徑不存在,會(huì)自動(dòng)創(chuàng)建。
  • 如果目標(biāo)路徑已經(jīng)存在同名文件,會(huì)被覆蓋(注意備份)。
  • 如果你移動(dòng)的是一個(gè)目錄,里面的所有內(nèi)容都會(huì)被一起移過(guò)去。

一個(gè)小技巧:如果你想重命名文件也可以用這個(gè)方法,只要在目標(biāo)路徑里改個(gè)名字就行,比如:shutil.move(‘old_name.txt’, ‘new_name.txt’)


復(fù)制文件或目錄:shutil.copy() 和 shutil.copytree()

復(fù)制比移動(dòng)更常用,特別是你想保留原文件的情況下。常用的有兩個(gè)函數(shù):

立即學(xué)習(xí)Python免費(fèi)學(xué)習(xí)筆記(深入)”;

  • shutil.copy(src, dst):復(fù)制單個(gè)文件
  • shutil.copytree(src, dst):復(fù)制整個(gè)目錄及其內(nèi)容

舉個(gè)例子:

# 復(fù)制單個(gè)文件 shutil.copy('source.txt', 'backup.txt')  # 復(fù)制整個(gè)文件夾 shutil.copytree('original_dir', 'backup_dir')

需要注意的地方:

  • copy() 會(huì)保留原文件的內(nèi)容和權(quán)限信息,但不會(huì)復(fù)制元數(shù)據(jù)(如時(shí)間戳)
  • 如果想復(fù)制元數(shù)據(jù),可以用 copy2() 替代
  • copytree() 的目標(biāo)路徑不能已存在,否則會(huì)報(bào)錯(cuò)

打包與解壓:shutil.make_archive() 和 shutil.unpack_archive()

當(dāng)你想把一文件打成壓縮包,或者反過(guò)來(lái)解壓一個(gè) zip 文件,shutil 同樣支持。

打包成壓縮文件

shutil.make_archive('backup', 'zip', 'my_files')

這段代碼會(huì)把 my_files 目錄下的所有內(nèi)容打包成 backup.zip。

  • 第一個(gè)參數(shù)是輸出文件名(不含擴(kuò)展名)
  • 第二個(gè)參數(shù)是格式,可以是 ‘zip’, ‘tar’, ‘gztar’ 等
  • 第三個(gè)參數(shù)是要打包的目錄

解壓文件

shutil.unpack_archive('backup.zip', 'extract_here')
  • 第一個(gè)參數(shù)是壓縮包路徑
  • 第二個(gè)參數(shù)是解壓的目標(biāo)路徑,不填的話默認(rèn)當(dāng)前目錄

其他實(shí)用功能簡(jiǎn)要提一下

雖然不是標(biāo)題重點(diǎn),但這里順便提幾個(gè)有用的函數(shù):

  • shutil.rmtree(path):刪除整個(gè)目錄(包括里面的文件)
  • shutil.which(cmd):查找某個(gè)命令是否存在 PATH 中
  • shutil.disk_usage(path):查看磁盤使用情況

這些都能在日常腳本開(kāi)發(fā)中帶來(lái)便利。


基本上就這些,shutil 雖然功能不算復(fù)雜,但非常實(shí)用。關(guān)鍵是在做批量文件操作時(shí),能省下不少手動(dòng)處理的時(shí)間。不過(guò)也正因?yàn)樗摹捌茐男浴辈僮鬏^多,比如移動(dòng)、刪除,建議在正式運(yùn)行前多測(cè)試幾次,防止誤刪重要文件。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊5 分享
站長(zhǎng)的頭像-小浪學(xué)習(xí)網(wǎng)月度會(huì)員