Python shutil模塊實(shí)現(xiàn)文件的裁剪、壓縮與解壓縮的方法
今天的章節(jié)我們來學(xué)習(xí)一下文件的裁剪、壓縮與解壓縮。所謂的文件裁剪就是從目前文件路徑A移動(dòng)到目標(biāo)文件路徑B ,A 與 B可能是相同的,也有可能是不同的。當(dāng)目標(biāo)移動(dòng)之后,A 路徑下就不存在這個(gè)文件了,只存在目標(biāo)路徑 B 下。但是也支持目標(biāo) A 下的名稱進(jìn)行改變,所以它也是一個(gè)變相的重命名。至于壓縮與解壓縮,這里就不需要過多的語言解釋了吧… 都懂的…
?? 利用 shutil 實(shí)現(xiàn)文件的裁剪(移動(dòng)、重命名)
導(dǎo)入包與模塊
from shutil import move使用方法:
move(來源地址, 目標(biāo)地址)
結(jié)合我們上一章節(jié)的測試腳本場景,將 abcd.txt 移動(dòng)到 test01 目錄下,然后再將 abcd_copy.txt 在當(dāng)前目錄下重命名為 efg_copy.txt。

代碼示例如下:
# coding:utf-8
import os
from shutil import move
path = os.path.join(os.getcwd(), 'abcd.txt') # 利用 os 模塊的 getcwd() 函數(shù) 分別獲取絕對路徑
target = os.path.join(os.getcwd(), 'test01')
move(path, target) # 將 "abcd.txt" 文件移動(dòng)到 "test01" 目錄下
move('abcd_copy.txt', 'efg_copy.txt') # 將 "abcd_copy.txt" 重命名為 "efg_copy.txt"運(yùn)行結(jié)果如下:

?? 文件的刪除
這里我們將使用到 os 包的 remove() 函數(shù)實(shí)現(xiàn)文件的刪除操作,在 shutil 包中是沒有包含單獨(dú)的文件刪除的函數(shù)的,是因?yàn)?os 包的刪除已經(jīng)足夠細(xì)致了。
接下來我們再鞏固一下 os 包的remove() 函數(shù),利用 remove() 函數(shù)刪除上文我們重名后的 efg.txt 文件:
# coding:utf-8
import os
from shutil import copy, copyfile, move
path = os.path.join(os.getcwd(), 'abcd.txt') # 利用 os 模塊的 getcwd() 函數(shù) 分別獲取絕對路徑
target = os.path.join(os.getcwd(), 'test01')
# copyfile(path, target)
# move(path, target) # 將 "abcd.txt" 文件移動(dòng)到 "test01" 目錄下
# move('abcd_copy.txt', 'efg_copy.txt') # 將 "abcd_copy.txt" 重命名為 "efg_copy.txt"
os.remove('efg_copy.txt')運(yùn)行結(jié)果如下:

?? 利用 shutil 實(shí)現(xiàn)文件的壓縮
讓我們先看看壓縮的函數(shù):
導(dǎo)入包與模塊
from shutil import make_archive使用方法
make_archive(壓縮之后的文件名, 壓縮文件的后綴, 希望被壓縮的文件或目錄)
返回值
生成的壓縮包地址
import os
from shutil import copy, copyfile, move, make_archive
path = os.path.join(os.getcwd(), 'abcd.txt') # 利用 os 模塊的 getcwd() 函數(shù) 分別獲取絕對路徑
target = os.path.join(os.getcwd(), 'test01')
make_archive('test01', 'zip', os.path.join(os.getcwd(), 'test01'))運(yùn)行結(jié)果如下:

?? 利用 shutil 實(shí)現(xiàn)文件的解壓縮
讓我們再看看解壓縮的函數(shù):
導(dǎo)入包與模塊
from shutil import unpack_archive使用方法
unpack_archive(要解壓的文件, 解壓后的路徑)
返回值
生成的壓縮包地址
代碼示例如下:
# coding:utf-8
import os
from shutil import copy, copyfile, move, make_archive, unpack_archive
# path = os.path.join(os.getcwd(), 'abcd.txt') # 利用 os 模塊的 getcwd() 函數(shù) 分別獲取絕對路徑
# target = os.path.join(os.getcwd(), 'test01')
# make_archive('test01', 'zip', os.path.join(os.getcwd(), 'test01'))
target = os.path.join(os.getcwd(), 'test02') # 為了區(qū)分解壓之后的目錄名稱與之前的test01,這里使用test02 作為解壓后的目錄
unpack_archive('test01.zip', target) 運(yùn)行結(jié)果如下:

補(bǔ)充:
python之shutil模塊shutil模塊——高級(jí)的文件、文件夾、壓縮包處理模塊
shutil 對壓縮包的處理是調(diào)用ZipFile和TarFile兩個(gè)模塊來進(jìn)行的
zipfile 壓縮解壓縮
- tarfile 壓縮解壓縮
shutil.copyfileobj(fsrc,fdest[,length]) #將文件內(nèi)容拷貝到另一個(gè)文件中
import shutil
shutil.copyfileobj(open('old.xml','r'),open('new.xml','w'))
shutil.copyfile(src,dst) #拷貝文件,目標(biāo)文件無需存在
shutil.copyfile('f1.log','f2.log')
shutil.copymode(src,dst) #僅拷貝文件權(quán)限,內(nèi)容,用戶,組均不變,目標(biāo)文件必須存在
shutil.copymode('f1.log','f2.log')
shutil.copystat(src,dst) #僅拷貝狀態(tài)的信息,包括:mode bits,atime,mtime,flags,目標(biāo)文件必須存在
shutil.copystat('f1.log','f2.log')
shutil.copy(src,dst) #拷貝文件和權(quán)限
import shutil
shutil.copy('f1.log','f2.log')
shutil.copy2(src,dst) #拷貝文件和狀態(tài)信息
import shutil
shutil.copy2('f1.log','f2.log')
shutil.ignore_patterns(*patterns)
shutil.copytree(src,dst,symlinks=False,ignore=None) #遞歸的去拷貝文件夾,
import shutil
shutil.copytree('folder1','folder2',ignore=shutil.ignore_patterns('*.py','tmp*')) #目標(biāo)目錄不能存在,注意對folder2目錄父級(jí)目錄要有可寫權(quán)限,ignore的意思是排除;拷貝軟鏈接
shutil.rmtree(path[,ignore_errors[,onerror]]) #遞歸的去刪除文件
import shutil
shutil.rmtree('folder')
shutil.move(src,dst) #遞歸的去移動(dòng)文件,類似mv命令,其實(shí)就是重命名
import shutil
shutil.move('folder1','folder3')
shutil.make_archive(base_name.format,...) #創(chuàng)建壓縮包并返回文件路徑,例如:zip.tar
#base_name:壓縮包的文件名,也可以是壓縮包的路徑。只是文件名時(shí),保存至當(dāng)前目錄,否則保存到指定路徑,如:data.bak 保存至當(dāng)前路徑,/tmp/data.bak保存至/tmp
#format: 壓縮包種類,zip,tar,bztar,gztar
#root_dir: 要壓縮的文件夾路徑(默認(rèn)當(dāng)前目錄)
#owner: 用戶,默認(rèn)當(dāng)前用戶
#group: 組。默認(rèn)當(dāng)前組
#logger: 用于記錄日志,通常是logging.Logger對象
#將/data下的文件打包放置當(dāng)前程序目錄
import shutil
ret=shutil.make_archive('data.bak','gztar',root_dir='/data')
#將/data下的文件打包放置/tmp目錄
import shutil
ret=shutil.make_archive('/tmp/data.bak','gztar',root_dir='/data')
#解壓縮: zipfile 壓縮解壓縮 tarfile 壓縮解壓縮
import tarfile
#壓縮,打開文件/tmp/wei.tar,將文件/test1/a.py和/test1/b.py添加進(jìn)去
t=tarfile.open('/tmp/wei.tar','w')
t.add('/test1/a.py',arcname='a.bak')
t.add('/test1/b.py',arcname='a.bak')
t.close()
#解壓縮,將/tmp/wei.tar解壓到/wei下
t=tarfile.open('/tmp/wei.tar','r')
t.extractall('/wei')
t.close()
到此這篇關(guān)于Python shutil模塊實(shí)現(xiàn)文件的裁剪、壓縮與解壓縮的文章就介紹到這了,更多相關(guān)Python文件的裁剪壓縮與解壓縮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django配置kafka消息隊(duì)列的實(shí)現(xiàn)
本文主要介紹了Django配置kafka消息隊(duì)列的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
Opencv實(shí)現(xiàn)眼睛控制鼠標(biāo)的實(shí)踐
本文主要介紹了Opencv實(shí)現(xiàn)眼睛控制鼠標(biāo)的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
python計(jì)算Content-MD5并獲取文件的Content-MD5值方式
這篇文章主要介紹了python計(jì)算Content-MD5并獲取文件的Content-MD5值方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
MacOS?Pytorch?機(jī)器學(xué)習(xí)環(huán)境搭建方法
這篇文章主要介紹了MacOS?Pytorch?機(jī)器學(xué)習(xí)環(huán)境搭建,學(xué)習(xí) Pytorch?,首先要搭建好環(huán)境,這里將采用?Anoconda + Pytorch + PyCharm 來一起構(gòu)建 Pytorch 學(xué)習(xí)環(huán)境,需要的朋友可以參考下2023-02-02
Python的標(biāo)準(zhǔn)模塊包json詳解
這篇文章主要介紹了Python的標(biāo)準(zhǔn)模塊包json詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03

