windows使用Python調用7-Zip【按大小分組】壓縮文件夾中所有文件

使用Python調用7-Zip【按大小分組】壓縮文件夾中所有文件

  • 問題描述:
  • 方法
    • 前提條件
    • 任務
    • 完整代碼示例
      • 代碼如何工作?

問題描述:

我現在想把文件夾下的所有內容上傳到網盤,但是這個文件夾下的素材內容很多,使用分卷壓縮的話,要一起壓縮完上傳。解壓時得一起下載完再解壓。200多G太大了。

又因為其實我用不完這個文件夾下全部的素材,有時候只下載一些就夠用了,所以我希望:

能使用python 調用 7-zip,每20G壓縮一個壓縮包,命名后保存。直到把文件夾下所有的文件壓縮完。

方法

前提條件

在動手之前,你需要準備以下工具:

  • Python:推薦使用Python 3.x版本,已安裝并可運行。
  • 7-Zip:一個免費的壓縮工具,點擊這里下載并安裝。
  • 基本環境:確保你的電腦上Python和7-Zip都能正常運行。

任務

  • 文件管理:將大文件夾拆分成小份,便于上傳或存儲。
  • 自動化:通過Python腳本,避免手動操作的繁瑣。
  • 通用性:不僅限于視頻文件,適用于任何類型文件。

完整代碼示例

- `seven_zip_path`:替換為你的7zip的安裝路徑。
  • folder_path:替換為你的文件夾路徑。
  • output_dir:設置壓縮包保存位置。
  • max_size_gb:調整每組的大小(比如10GB、50GB)。
  • password:輸入你的壓縮包密碼,或者留空(password = None)。
import os
import subprocess# 獲取文件夾中的所有文件
def get_all_files(folder_path):"""遍歷文件夾,返回所有文件的路徑列表"""file_list = []for root, dirs, files in os.walk(folder_path):for file in files:file_path = os.path.join(root, file)file_list.append(file_path)return file_list# 按大小分組文件
def group_files_by_size(file_list, max_size_gb=25):"""將文件按指定大小(GB)分組"""max_size_bytes = max_size_gb * 1024 * 1024 * 1024  # GB轉換為字節groups = []current_group = []current_size = 0for file in file_list:file_size = os.path.getsize(file)# 如果當前組加上新文件超出限制,且當前組不為空,則新建一組if current_size + file_size > max_size_bytes and current_group:groups.append(current_group)current_group = []current_size = 0current_group.append(file)current_size += file_size# 添加最后一組if current_group:groups.append(current_group)return groups# 使用7-Zip壓縮一組文件
def compress_files(group, output_file, seven_zip_path, password=None):"""調用7-Zip壓縮一組文件,可選設置密碼"""# 檢查7-Zip是否可用if not os.path.exists(seven_zip_path):print("錯誤:請檢查7-Zip安裝路徑是否正確!")return# 構建7-Zip命令command = [seven_zip_path,"a",          # 添加到壓縮包"-t7z",       # 使用7z格式output_file,  # 輸出文件名]if password:      # 如果設置了密碼command.extend(["-p{}".format(password), "-mhe=on"])  # 添加密碼并加密文件名command.extend(group)  # 添加文件列表# 執行壓縮try:result = subprocess.run(command, capture_output=True, text=True)if result.returncode == 0:print(f"壓縮成功:{output_file}")else:print(f"壓縮失敗:{result.stderr}")except Exception as e:print(f"發生錯誤:{str(e)}")# 主函數
def main():# 配置參數seven_zip_path = r"D:\Program Files\7-Zip\7z.exe"  # 7-Zip安裝路徑,可根據需要修改folder_path = r"D:\MyFiles"                       # 要壓縮的文件夾路徑output_dir = r"D:\CompressedFiles"                # 壓縮包保存目錄max_size_gb = 25                                  # 每組最大大小(GB)password = "mysecret123"                          # 壓縮密碼(可選,留空則無密碼)# 創建輸出目錄(如果不存在)if not os.path.exists(output_dir):os.makedirs(output_dir)# 獲取文件列表files = get_all_files(folder_path)if not files:print("錯誤:文件夾中沒有文件!")return# 分組文件file_groups = group_files_by_size(files, max_size_gb)# 壓縮每組文件for i, group in enumerate(file_groups, start=1):output_file = os.path.join(output_dir, f"Part_{i}.7z")print(f"正在壓縮第 {i} 組文件...")compress_files(group, output_file, seven_zip_path, password)if __name__ == "__main__":main()

代碼如何工作?

  1. get_all_files

    • 使用 os.walk 遍歷文件夾,收集所有文件的完整路徑。
    • 適用于任何文件類型,不局限于視頻。
  2. group_files_by_size

    • 根據文件大小(字節)將文件分組。
    • 每組大小不超過 max_size_gb,通過累加文件大小判斷是否需要新建一組。
  3. compress_files

    • 使用 subprocess.run 調用7-Zip,執行壓縮命令。
    • 支持可選密碼保護,加密文件名(-mhe=on)。
  4. main

    • 設置輸入文件夾、輸出目錄、分組大小和密碼。
    • 按順序處理每組文件,生成獨立的壓縮包。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75590.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75590.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75590.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《Python星球日記》第26天:Matplotlib 可視化

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder😊) 訂閱專欄:《Python星球日記》 目錄 一、Matplotlib 簡介1. 什么是 Matplo…

第1章 對大型語言模型的介紹

人類正處在一個關鍵轉折點。自2012年起,基于深度神經網絡的人工智能系統研發進入快速通道,將這一技術推向了新高度:至2019年底,首個能夠撰寫與人類文章真假難辨的軟件系統問世,這個名為GPT-2(生成型預訓練變…

dcsdsds

我將為您在頁面頂部添加歡迎內容&#xff0c;同時保持整體風格的一致性。以下是修改后的代碼&#xff0c;主要修改了模板部分和對應的樣式&#xff1a; vue 復制 <template><div class"main-wrapper"><!-- 新增歡迎部分 --><div class"…

學習MySQL的第八天

海到無邊天作岸 山登絕頂我為峰 一、數據庫的創建、修改與刪除 1.1 引言 在經過前面七天對于MySQL基本知識的學習之后&#xff0c;現在我們從基本的語句命令開始進入綜合性的語句的編寫來實現特定的需求&#xff0c;從這里開始需要我們有一個宏觀的思想&…

Linux-內核驅動-中斷-key

DEV_NAME&#xff1a;設備名稱。 wg&#xff1a;等待隊列頭&#xff0c;用于同步。 condition&#xff1a;條件變量&#xff0c;用于等待和喚醒。 中斷處理函數 irq_handler&#xff1a;處理中斷請求&#xff0c;設置條件變量并喚醒等待隊列中的進程。 文件操作函數 open…

asm匯編源代碼之按鍵處理相關函數

提供5個子程序: 1. 發送按鍵 sendkey 2. 檢測是否有按鍵 testkey 3. 讀取按鍵 getkey 4. 判斷鍵盤緩沖區是否為空 bufempty 5. 判斷鍵盤緩沖區是否已滿 buffull 具體功能及參數描述如下 sendkey proc  far ; axcharcode testkey proc  far ; out: ;   zf1 buff empt…

Java Collections 類中常用方法使用

一、Collections類 java.util.Collections 類是 Java 集合框架中的一個工具類&#xff0c;提供了一系列靜態方法來操作和處理各種類型的集合。這些方法簡化了對集合進行排序、查找、同步控制、創建只讀集合等常見操作的過程。 二、常用方法 方法類別??方法簽名??功能??需…

Linux網絡編程——數據鏈路層詳解,以太網、MAC地址、MTU、ARP、DNS、NAT、代理服務器......

目錄 一、前言 二、以太網 二、以太網幀格式 三、 MAC地址 四、MTU 1、數據鏈路層的數據分片 2、MTU對UDP協議的影響 3、MTU對TCP協議的影響 五、ARP協議 1、什么是ARP 2、ARP的作用 3、ARP協議的工作流程 4、ARP緩存表 5、ARP請求報文 6、中間人 六、DNS&…

輕量級開源文件共享系統PicoShare本地部署并實現公網環境文件共享

&#xfeff;## 前言 本篇文章介紹&#xff0c;如何在 Linux 系統本地部署輕量級文件共享系統 PicoShare&#xff0c;并結合 Cpolar 內網穿透實現公網環境遠程傳輸文件至本地局域網內文件共享系統。 PicoShare 是一個由 Go 開發的輕量級開源共享文件系統&#xff0c;它沒有文…

基于查表法的 CRC8 / CRC16 / CRC32校驗解析

在嵌入式開發中&#xff0c;CRC&#xff08;Cyclic Redundancy Check&#xff09;循環冗余校驗算法廣泛應用于通信數據校驗、Flash 數據完整性檢測、Bootloader 升級驗證等場景。本文將深入剖析一套完整的 CRC8、CRC16 和 CRC32 實現&#xff0c;并通過查表法&#xff08;Table…

二戰藍橋杯所感

&#x1f334; 前言 今天是2025年4月12日&#xff0c;第十六屆藍橋杯結束&#xff0c;作為二戰的老手&#xff0c;心中還是頗有不甘的。一方面&#xff0c;今年的題目比去年簡單很多&#xff0c;另一方面我感覺并沒有把能拿的分都拿到手&#xff0c;這是我覺得最遺憾的地方。不…

基于ueditor編輯器的功能開發之給編輯器圖片增加水印功能

用戶需求&#xff0c;雙擊編輯器中的圖片的時候&#xff0c;出現彈框&#xff0c;用戶可以選擇水印縮放倍數、距離以及水印所放置的方位&#xff08;當然有很多水印插件&#xff0c;位置大小透明度用戶都能夠自定義&#xff0c;但是用戶需求如此&#xff0c;就自己寫了&#xf…

算法題(123):回文日期

審題&#xff1a; 本題需要我們判斷以八位數確定的日期范圍中是否存在回文數 思路&#xff1a; 方法一&#xff1a;枚舉法 1.確定枚舉對象&#xff1a; 對象1&#xff1a;八位數日期&#xff0c;所需枚舉次數&#xff1a;10^8 對象2&#xff1a;年&#xff0c;所需枚舉次數&…

數據庫表的操作

一、數據庫的搭建 如上篇文章 二、基礎了解 show命令支持模糊匹配 show databases、show tables、 show databases like “” “%”、“_”通配符字符串 三、MySQL數據庫表的操作 關系型數據庫都是遵循SQL語法進行數據查詢和管理的 3.1 SQL介紹 3.1.1 SQL的功能 結構化查詢語…

在 Lua 中實現 JSON 與 Table 的相互轉換的詳細使用方法

在 Lua 中實現 JSON 與 Table 的相互轉換是常見的數據序列化需求。以下是詳細的實現方案、性能優化技巧及進階用法&#xff1a; 在 Lua 中實現 JSON 與 Table 的相互轉換的詳細使用方法-目錄 一、常用 JSON 庫對比二、基礎轉換實現1. 使用 lua-cjson&#xff08;高性能 C 庫&am…

dbVisitor 規則怎么用?

在數據庫操作中&#xff0c;dbVisitor 是一個功能強大的工具&#xff0c;其規則的使用大大簡化了 SQL 語句的編寫過程。下面將詳細介紹 dbVisitor 規則的使用方法并附上具體例子。 一、規則的基本調用 在 dbVisitor 中&#xff0c;SQL 語句可以通過 {...} 的形式來調用規則&a…

Kingbase 常用運維命令總結

一、數據庫連接與基礎操作 連接指定服務器數據庫 ksql -h 主機IP -p 端口號 -U 用戶名 -d 數據庫名 -W # 示例&#xff1a;連接 IP 為 192.168.1.100 的數據庫 ksql -h 192.168.1.100 -p 54321 -U system -d test -W 斷開數據庫連接 \q 或 exit 查看數據庫列表及詳細信息…

【數據結構與算法】LRU Cache 算法實現

文章目錄 Ⅰ. 什么是 LRU CacheⅡ. LRU Cache 的實現[146. LRU 緩存](https://leetcode.cn/problems/lru-cache/) Ⅰ. 什么是 LRU Cache ? LRU&#xff08; Least Recently Used&#xff09; 是一種淘汰策略的縮寫&#xff0c;意思是 最近最少使用&#xff0c;它是一種 Cache…

網頁布局匯總

1. 盒模型 容器大小 內容大小 內邊距(padding) 邊框大小 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…

打造海外流量矩陣,TikTok云控工具讓獲客更簡單!

跨境獲客&#xff0c;始終是無數企業主心中的一道難題。今天&#xff0c;給大家帶來一款強大實用的工具——TikTok矩陣云控系統&#xff0c;幫你輕松突破流量瓶頸&#xff0c;實現高效跨境獲客&#xff01; 跨國遠程操控——蘋果手機矩陣云控系統 在正式開始之前&#xff0c;…