Python實現(xiàn)批量壓縮解壓文件(zip、rar)
好長一段時間沒有更新了,最近手里的項目沒停過太忙了。今天正好有空就分享下之前編寫的一段代碼。
起因是因為我想將一些文件上傳至網(wǎng)盤,但奈何太窮開不起會員,無法上傳超過4G的文件。于是就想能不能使用Python實現(xiàn)批量壓縮文件夾,搞都搞了順便將解壓文件夾也寫出來了。今天就和大家分享一下。
一、導(dǎo)入相關(guān)庫
os庫是為了監(jiān)測生成的文件夾是否已存在。主要的庫是zipfile,它提供了有關(guān)windows下的文件/文件夾的壓縮、解壓的函數(shù)。
import os import zipfile
二、壓縮文件
今天偷個懶,就不一段一段的去解釋了,直接整個函數(shù)展示。相關(guān)的注釋已經(jīng)寫清楚了,主要函數(shù)就是zipfile.ZipFile和zip_file.write。zip_file.write(file_path,file_each)中,file_path是文件夾中文件的完整路徑,file_each是文件名。
def Compress_path_zip(path_all):
path_all_list = os.listdir(path_all)
# 列出總文件夾內(nèi)所有需要壓縮的文件夾
for path_each in path_all_list:
path_compress = os.path.join(path_all, path_each)
# 待壓縮的絕對路徑
if os.path.isdir(path_compress):
print("正在壓縮:%s" % path_each)
# 遍歷所有需要壓縮的文件夾
if os.path.exists(path_all + "%s.zip" % path_each):
print(path_all + "%s1.zip" % path_each+"已存在,新文件名為'%s'" % (path_all + "%s1.zip" % path_each))
zip_file = zipfile.ZipFile(path_all + "%s1.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
# 創(chuàng)建的壓縮對象用于執(zhí)行后續(xù)操作
# file_list = zip_file.namelist()
# 列出壓縮文件夾中所有文件
else:
zip_file = zipfile.ZipFile(path_all + "%s.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
file_list = os.listdir(path_compress)
# 待壓縮文件夾內(nèi)所有文件
# zip_file.setpassword(b'123')
for file_each in file_list:
# 遍歷所有文件夾內(nèi)的文件
file_path = os.path.join(path_compress, file_each)
zip_file.write(file_path, file_each)
zip_file.close()
else:
print(path_each, "不是文件夾,不進行壓縮")
continue三、解壓文件
這段代碼就不細(xì)說了,反正修改了路徑就能直接使用了。
def Decompress_path_zip(path_all):
path_all_list = os.listdir(path_all)
for path_each in path_all_list:
# 遍歷所有需要壓縮的文件夾
if path_each.endswith('.zip'):
print("正在解壓:%s" % path_each)
path_decompress = os.path.join(path_all, path_each)
zip_file = zipfile.ZipFile(path_decompress, 'r') # 壓縮文件位置
for file in zip_file.namelist():
if os.path.exists(path_decompress[:-4]):
print("'%s'" % path_decompress[:-4], "已存在,新文件名為'%s'" % (path_decompress[:-4] + "1"))
zip_file.extract(file, path_decompress[:-4] + "1") # 解壓位置,pwd="1234".encode('utf-8')
else:
zip_file.extract(file, path_decompress[:-4]) # 解壓位置
zip_file.close()
else:
print(path_each, "非zip文件,不進行解壓!")
continue四、完整代碼
# -*- coding: utf-8 -*-
"""
@Time : 2023/8/28 14:47
@Auth : RS迷途小書童
@File :Compress and Decompress Folders.py
@IDE :PyCharm
@Purpose:批量壓縮/解壓文件夾
"""
import os
import zipfile
def Compress_path_zip(path_all):
path_all_list = os.listdir(path_all)
# 列出總文件夾內(nèi)所有需要壓縮的文件夾
for path_each in path_all_list:
path_compress = os.path.join(path_all, path_each)
# 待壓縮的絕對路徑
if os.path.isdir(path_compress):
print("正在壓縮:%s" % path_each)
# 遍歷所有需要壓縮的文件夾
if os.path.exists(path_all + "%s.zip" % path_each):
print(path_all + "%s1.zip" % path_each+"已存在,新文件名為'%s'" % (path_all + "%s1.zip" % path_each))
zip_file = zipfile.ZipFile(path_all + "%s1.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
# 創(chuàng)建的壓縮對象用于執(zhí)行后續(xù)操作
# file_list = zip_file.namelist()
# 列出壓縮文件夾中所有文件
else:
zip_file = zipfile.ZipFile(path_all + "%s.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
file_list = os.listdir(path_compress)
# 待壓縮文件夾內(nèi)所有文件
# zip_file.setpassword(b'123')
for file_each in file_list:
# 遍歷所有文件夾內(nèi)的文件
file_path = os.path.join(path_compress, file_each)
zip_file.write(file_path, file_each)
zip_file.close()
else:
print(path_each, "不是文件夾,不進行壓縮")
continue
def Decompress_path_zip(path_all):
path_all_list = os.listdir(path_all)
for path_each in path_all_list:
# 遍歷所有需要壓縮的文件夾
if path_each.endswith('.zip'):
print("正在解壓:%s" % path_each)
path_decompress = os.path.join(path_all, path_each)
zip_file = zipfile.ZipFile(path_decompress, 'r') # 壓縮文件位置
for file in zip_file.namelist():
if os.path.exists(path_decompress[:-4]):
print("'%s'" % path_decompress[:-4], "已存在,新文件名為'%s'" % (path_decompress[:-4] + "1"))
zip_file.extract(file, path_decompress[:-4] + "1") # 解壓位置,pwd="1234".encode('utf-8')
else:
zip_file.extract(file, path_decompress[:-4]) # 解壓位置
zip_file.close()
else:
print(path_each, "非zip文件,不進行解壓!")
continue
if __name__ == "__main__":
path = "G:/try/"
# Compress_path_zip(path)
Decompress_path_zip(path)本來是想將壓縮加密文件和解壓加密文件寫出來的,結(jié)果zipfile庫好像不支持加密文件,所以就沒寫。雖然解壓加密文件可以,但是很呆,因為只有使用傳統(tǒng)加密的zip文件,才可以使用密碼解壓,不是傳統(tǒng)加密的就算密碼正確他也不解壓,所以就都不寫啦。大家如果想用的話,直接修改路徑就行。
到此這篇關(guān)于Python實現(xiàn)批量壓縮解壓文件(zip、rar)的文章就介紹到這了,更多相關(guān)Python 批量壓縮解壓文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python的collections模塊中的OrderedDict有序字典
字典是無序的,但是collections的OrderedDict類為我們提供了一個有序的字典結(jié)構(gòu),名副其實的Ordered+Dict,下面通過兩個例子來簡單了解下Python的collections模塊中的OrderedDict有序字典:2016-07-07
Keras load_model 導(dǎo)入錯誤的解決方式
這篇文章主要介紹了Keras load_model 導(dǎo)入錯誤的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
tf.truncated_normal與tf.random_normal的詳細(xì)用法
本篇文章主要介紹了tf.truncated_normal與tf.random_normal的詳細(xì)用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03
pandas dataframe中雙中括號和單中括號的區(qū)別及說明
這篇文章主要介紹了pandas dataframe中雙中括號和單中括號的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
Python實現(xiàn)網(wǎng)絡(luò)通信的HTTP請求Socket編程Web爬蟲方法探索
隨著互聯(lián)網(wǎng)的不斷發(fā)展,Python作為一門多用途的編程語言,提供了強大的工具和庫來進行網(wǎng)絡(luò)連接和通信,本文將深入探討Python中連接網(wǎng)絡(luò)的方法,包括HTTP請求、Socket編程、Web爬蟲和REST?API的使用2024-01-01
純用NumPy實現(xiàn)神經(jīng)網(wǎng)絡(luò)的示例代碼
這篇文章主要介紹了純用NumPy實現(xiàn)神經(jīng)網(wǎng)絡(luò)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10

