網站首頁 編程語言 正文
目前對文件的壓縮和解壓縮比較常用的格式就是zip格式和7z格式,今天就以一篇文章來融會貫通會該兩個壓縮文件格式的操作。
一:zipfile的常用操作
1,壓縮文件
?zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
?????????參數file表示文件的路徑;參數mode指示打開zip文件的模式,有三種mode
- 解壓:r
- 壓縮:w
- 追加壓縮:a?
默認值為'r',表示讀已經存在的zip文件,也可以為'w'或'a','w'表示新建一個zip文檔或覆蓋一個已經存在的zip文檔,‘a’表示追加壓縮
下面我們創建一個壓縮文件result.zip,并壓縮test文件夾下的所有文件
import zipfile
import os
testdir = "D:\\FTZ\\python_tool\\result\\test"
filename = "./result.zip"
z = zipfile.ZipFile(filename, 'w')
for d in os.listdir(testdir):
z.write(d)
z.close
當然上面還可以用with的方法打開
import zipfile
import os
testdir = "D:\\DPI\\python_tool\\result\\test"
filename = "./result.zip"
with zipfile.ZipFile(filename, 'w') as z:
for d in os.listdir(testdir):
z.write(d)
z.close
2,解壓縮文件
import zipfile
import os
testdir = "D:\\FTZ\\python_tool\\result\\test"
filename = "./result.zip"
with zipfile.ZipFile(filename, 'r') as z:
z.extractall(testdir)
需要注意的是有些壓縮包解壓是有密碼,這時候調用extractall的時候也支持輸入密碼,在python3中,解壓文件的密碼參數 pwd?接收的是二進制的值,所以要在前面加一個 b
z.extractall(testdir,pwd=b"ftz")
3,列出壓縮包里的所有文件
import zipfile
import os
testdir = "D:\\DPI\\python_tool\\result\\test"
filename = "./result.zip"
with zipfile.ZipFile(filename, 'r') as z:
files = z.namelist()
print(files)
運行結果如下,返回的是一個列表:
?4,其他常用的方法
import zipfile
import os
testdir = "D:\\ftz\\python_tool\\result\\test"
filename = "./result.zip"
with zipfile.ZipFile(filename, 'r') as z:
z.setpassword(b'ftz1') #設置zip文檔的密碼。
z.printdir() #將zip文檔內的信息打印到控制臺上。
data = z.read('file.yaml') #獲取zip文檔內指定文件的二進制數據
print(data)
info = z.getinfo('file.yaml') #方法返回的是一個ZipInfo對象,表示zip文檔中相應文件的信息。它支持如下屬性
print("獲取文件名稱:",info.filename)
print("獲取文件最后修改時間:",info.date_time)
print("獲取壓縮類型:",info.compress_type)
print("獲取壓縮后的大小:",info.compress_size)
print("獲取未壓縮的文件大小:",info.file_size)
print("判斷是否是壓縮文件:",zipfile.is_zipfile(filename))
運行結果如下:
File Name ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Modified ? ? ? ? ? ? Size
data_yaml.yaml ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2022-06-25 10:50:42 ? ? ? ? ?198
file.yaml ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2022-06-25 10:13:46 ? ? ? ? ?123
vnfname.txt ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2022-01-14 11:27:56 ? ? ? ? 9320
b'\xe4\xb8\x80\xe7\xba\xa7\xe6\xa0\x87\xe9\xa2\x98:\n ? ?\xe4\xba\x8c\xe7\xba\xa7\xe6\xa0\x87\xe9\xa2\x981:\n ? ? ? ?b:1\n ? ? ? ?c:2\n ? ? ? ?a:3\n ? ?\xe4\xba\x8c\xe7\xba\xa7\xe6\xa0\x87\xe9\xa2\x982:\n ? ? ? ?f:7\n ? ? ? ?t:8\n ? ? ? ?z:9'
獲取文件名稱: file.yaml
獲取文件最后修改時間: (2022, 6, 25, 10, 13, 46)
獲取壓縮類型: 0
獲取壓縮后的大小: 123
獲取未壓縮的文件大小: 123
判斷是否是壓縮文件: True
[Finished in 0.2s]
當然getinfo也支持其他的屬性,下面給出比較全的屬性和方法
ZipInfo.filename: 獲取文件名稱。
ZipInfo.date_time: 獲取文件最后修改時間。返回一個包含6個元素的元組:(年, 月, 日, 時, 分, 秒)
ZipInfo.compress_type: 壓縮類型。
ZipInfo.comment: 文檔說明。
ZipInfo.extr: 擴展項數據。
ZipInfo.create_system: 獲取創建該zip文檔的系統。
ZipInfo.create_version: 獲取 創建zip文檔的PKZIP版本。
ZipInfo.extract_version: 獲取 解壓zip文檔所需的PKZIP版本。
ZipInfo.reserved: 預留字段,當前實現總是返回0。
ZipInfo.flag_bits: zip標志位。
ZipInfo.volume: 文件頭的卷標。
ZipInfo.internal_attr: 內部屬性。
ZipInfo.external_attr: 外部屬性。
ZipInfo.header_offset: 文件頭偏移位。
ZipInfo.CRC: 未壓縮文件的CRC-32。
ZipInfo.compress_size: 獲取壓縮后的大小。
ZipInfo.file_size: 獲取未壓縮的文件大小。
?二:py7zr的常用操作
?1,壓縮文件
import py7zr
with py7zr.SevenZipFile('target.7z', 'w') as archive:
archive.writeall('/path/to/base_dir', 'base')
如果想設置密碼壓縮
import py7zr
with py7zr.SevenZipFile('target.7z', 'w', password='secret') as archive:
archive.writeall('/path/to/base_dir', 'base')
2,解壓縮文件
import py7zr
archive = py7zr.SevenZipFile('sample.7z', mode='r')
archive.extractall(path="/tmp")
archive.close()
也支持with模式
import py7zr
with py7zr.SevenZipFile('sample.7z', mode='r') as z:
z.extractall()
with py7zr.SevenZipFile('target.7z', 'w') as z:
z.writeall('./base_dir')
py7z也支持提取某個文件或者符合正則匹配的文件
import py7zr
import re
filter_pattern = re.compile(r'<your/target/file_and_directories/regex/expression>')
with SevenZipFile('archive.7z', 'r') as archive:
allfiles = archive.getnames()
selective_files = [f for f in allfiles if filter_pattern.match(f)]
archive.extract(targets=selective_files)
支持解壓縮加密的7z文件
import py7zr
with py7zr.SevenZipFile('encrypted.7z', mode='r', password='secret') as z:
z.extractall()
原文鏈接:https://blog.csdn.net/qq_27071221/article/details/125462228
相關推薦
- 2022-10-04 Qt計時器使用方法詳解_C 語言
- 2022-07-03 TypeScript 變量聲明 —— 類型斷言
- 2023-01-15 Python?pytest.main()運行測試用例_python
- 2023-03-03 PostgreSQL時間日期的語法及注意事項_PostgreSQL
- 2022-10-10 pandas?修改列名的實現示例_python
- 2022-07-14 Android實現多點觸控功能_Android
- 2022-03-11 CentOS?8安裝Docker的詳細教程_docker
- 2023-06-18 C#最小二乘法擬合曲線成直線的實例_C#教程
- 最近更新
-
- 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同步修改后的遠程分支