網站首頁 編程語言 正文
前言:
Python在人工智能,后臺服務等領域中得到了廣泛應用。由于python有著大量的第三方開源包以及其易用的語言特性,這門語言在數據處理、批處理等方法具有強大的優勢,使用起來相當便捷。本文為大家帶來的是使用Python進行文件、文件夾壓縮與解壓,用到的是zipfile的第三方依賴庫。根據不同應用場景封裝了幾個方法,方便根據實際需要使用相應的方法,能夠篩選出需要壓縮的文件。
安裝:
pip install zipfile
代碼:
1、壓縮整個文件夾
import zipfile
import os
from tqdm import tqdm
def zip_file(src_dir, save_name='default'):
'''
壓縮文件夾下所有文件及文件夾
默認壓縮文件名:文件夾名
默認壓縮文件路徑:文件夾上層目錄
'''
if save_name == 'default':
zip_name = src_dir + '.zip'
else:
if save_name is None or save_name == '':
zip_name = src_dir + '.zip'
else:
zip_name = save_name + '.zip'
z = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
for dirpath, dirnames, filenames in os.walk(src_dir):
fpath = dirpath.replace(src_dir, '')
fpath = fpath and fpath + os.sep or ''
for filename in filenames:
z.write(os.path.join(dirpath, filename), fpath + filename)
z.close()
return True
2、壓縮指定擴展名文件
def zip_file_by_extension(src_dir, extension='dll', save_name='default'):
'''
根據文件擴展名篩選需要壓縮的文件到壓縮包
注:針對單層目錄情況,文件夾下的子文件不會被壓縮
'''
if save_name == 'default':
zip_name = src_dir + '.zip'
else:
if save_name is None or save_name == '':
zip_name = src_dir + '.zip'
else:
zip_name = save_name + '.zip'
z = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
file_list = os.listdir(src_dir)
for filename in tqdm(file_list):
if not os.path.isfile(os.path.join(src_dir, filename)):
continue
if filename.split('.')[-1] == extension:
print(r'正在壓縮文件:', filename, end='')
z.write(os.path.join(src_dir, filename), filename)
z.close()
return True
3、獲取指定類型的待壓縮文件列表
def get_zip_file_list(src_dir, extension='dll'):
'''
獲取需要壓縮的文件列表
'''
file_list = os.listdir(src_dir)
zip_list = []
for filename in file_list:
if not os.path.isfile(os.path.join(src_dir, filename)):
continue
if filename.split('.')[-1] == extension:
zip_list.append(filename)
print(zip_list)
4、解壓文件
def unzip_file(zip_src, dst_dir):
'''
解壓縮
'''
r = zipfile.is_zipfile(zip_src)
if r:
fz = zipfile.ZipFile(zip_src, 'r')
for file in fz.namelist():
fz.extract(file, dst_dir)
else:
print('This is not zip')
return False
return True
原文鏈接:https://juejin.cn/post/7085611772018688008
相關推薦
- 2022-09-08 深入了解Go語言的基本語法與常用函數_Golang
- 2022-12-09 C語言新手練習題之求第n個斐波那契數_C 語言
- 2023-01-14 python的數據與matlab互通問題:SciPy_python
- 2022-04-15 ASP.NET?Core基礎之中間件_基礎應用
- 2022-08-17 React-Route6實現keep-alive效果_React
- 2024-01-10 在多Module項目中,給IDEA底部選項卡區域添加Services選項卡
- 2022-12-04 C++?Boost.Range與Adapters庫使用詳解_C 語言
- 2023-07-22 macos通過homebrew安裝多版本node
- 最近更新
-
- 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同步修改后的遠程分支