網站首頁 編程語言 正文
今天的章節我們來學習一下文件的裁剪、壓縮與解壓縮。所謂的文件裁剪就是從目前文件路徑A移動到目標文件路徑B
,A 與 B可能是相同的,也有可能是不同的。當目標移動之后,A 路徑下就不存在這個文件了,只存在目標路徑 B 下。但是也支持目標 A 下的名稱進行改變,所以它也是一個變相的重命名。至于壓縮與解壓縮,這里就不需要過多的語言解釋了吧… 都懂的…
?? 利用 shutil 實現文件的裁剪(移動、重命名)
導入包與模塊
from shutil import move
使用方法:
move(來源地址, 目標地址)
結合我們上一章節的測試腳本場景,將 abcd.txt
移動到 test01
目錄下,然后再將 abcd_copy.txt
在當前目錄下重命名為 efg_copy.txt
。
代碼示例如下:
# coding:utf-8 import os from shutil import move path = os.path.join(os.getcwd(), 'abcd.txt') # 利用 os 模塊的 getcwd() 函數 分別獲取絕對路徑 target = os.path.join(os.getcwd(), 'test01') move(path, target) # 將 "abcd.txt" 文件移動到 "test01" 目錄下 move('abcd_copy.txt', 'efg_copy.txt') # 將 "abcd_copy.txt" 重命名為 "efg_copy.txt"
運行結果如下:
?? 文件的刪除
這里我們將使用到 os 包的 remove() 函數實現文件的刪除操作,在 shutil
包中是沒有包含單獨的文件刪除的函數的,是因為 os
包的刪除已經足夠細致了。
接下來我們再鞏固一下 os 包的remove()
函數,利用 remove()
函數刪除上文我們重名后的 efg.txt
文件:
# coding:utf-8 import os from shutil import copy, copyfile, move path = os.path.join(os.getcwd(), 'abcd.txt') # 利用 os 模塊的 getcwd() 函數 分別獲取絕對路徑 target = os.path.join(os.getcwd(), 'test01') # copyfile(path, target) # move(path, target) # 將 "abcd.txt" 文件移動到 "test01" 目錄下 # move('abcd_copy.txt', 'efg_copy.txt') # 將 "abcd_copy.txt" 重命名為 "efg_copy.txt" os.remove('efg_copy.txt')
運行結果如下:
?? 利用 shutil 實現文件的壓縮
讓我們先看看壓縮的函數:
導入包與模塊
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() 函數 分別獲取絕對路徑 target = os.path.join(os.getcwd(), 'test01') make_archive('test01', 'zip', os.path.join(os.getcwd(), 'test01'))
運行結果如下:
?? 利用 shutil 實現文件的解壓縮
讓我們再看看解壓縮的函數:
導入包與模塊
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() 函數 分別獲取絕對路徑 # target = os.path.join(os.getcwd(), 'test01') # make_archive('test01', 'zip', os.path.join(os.getcwd(), 'test01')) target = os.path.join(os.getcwd(), 'test02') # 為了區分解壓之后的目錄名稱與之前的test01,這里使用test02 作為解壓后的目錄 unpack_archive('test01.zip', target)
運行結果如下:
補充:
python之shutil模塊shutil模塊——高級的文件、文件夾、壓縮包處理模塊
shutil 對壓縮包的處理是調用ZipFile和TarFile兩個模塊來進行的
zipfile 壓縮解壓縮
- tarfile 壓縮解壓縮
shutil.copyfileobj(fsrc,fdest[,length]) #將文件內容拷貝到另一個文件中 import shutil shutil.copyfileobj(open('old.xml','r'),open('new.xml','w')) shutil.copyfile(src,dst) #拷貝文件,目標文件無需存在 shutil.copyfile('f1.log','f2.log') shutil.copymode(src,dst) #僅拷貝文件權限,內容,用戶,組均不變,目標文件必須存在 shutil.copymode('f1.log','f2.log') shutil.copystat(src,dst) #僅拷貝狀態的信息,包括:mode bits,atime,mtime,flags,目標文件必須存在 shutil.copystat('f1.log','f2.log') shutil.copy(src,dst) #拷貝文件和權限 import shutil shutil.copy('f1.log','f2.log') shutil.copy2(src,dst) #拷貝文件和狀態信息 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*')) #目標目錄不能存在,注意對folder2目錄父級目錄要有可寫權限,ignore的意思是排除;拷貝軟鏈接 shutil.rmtree(path[,ignore_errors[,onerror]]) #遞歸的去刪除文件 import shutil shutil.rmtree('folder') shutil.move(src,dst) #遞歸的去移動文件,類似mv命令,其實就是重命名 import shutil shutil.move('folder1','folder3') shutil.make_archive(base_name.format,...) #創建壓縮包并返回文件路徑,例如:zip.tar #base_name:壓縮包的文件名,也可以是壓縮包的路徑。只是文件名時,保存至當前目錄,否則保存到指定路徑,如:data.bak 保存至當前路徑,/tmp/data.bak保存至/tmp #format: 壓縮包種類,zip,tar,bztar,gztar #root_dir: 要壓縮的文件夾路徑(默認當前目錄) #owner: 用戶,默認當前用戶 #group: 組。默認當前組 #logger: 用于記錄日志,通常是logging.Logger對象 #將/data下的文件打包放置當前程序目錄 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添加進去 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()
原文鏈接:https://huskypower.blog.csdn.net/article/details/124580184
相關推薦
- 2023-07-14 express+mongoose實現無限級分類
- 2023-07-18 IDEA中springboot的熱加載thymeleaf靜態html頁面
- 2022-07-08 C#中Lambda表達式的用法_C#教程
- 2022-08-20 C#?Chart折線圖使用鼠標滾輪放大、縮小和平移曲線方式_C#教程
- 2022-11-06 Android實現圓形圖片小工具_Android
- 2022-03-25 如何使用postman(postman的使用方法詳解)
- 2023-06-18 聚星C#數字信號處理工具包頻譜分析的用法_C#教程
- 2022-03-30 Python機器學習應用之樸素貝葉斯篇_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支