自動化文件監控與分類壓縮:實現高效文件管理

自動化文件監控與分類壓縮:實現高效文件管理

引言

在現代數據處理和文件管理中,如何高效地管理和歸檔大量文件是一個常見的挑戰。特別是在需要根據文件類型進行分類并定期歸檔的場景下,手動操作不僅耗時且容易出錯。為此,我們開發了一款基于Python的自動化工具,能夠實時監控指定目錄中的文件,并根據文件類型自動進行壓縮歸檔。本文將詳細介紹該工具的功能、實現原理及其應用場景。

功能概述

該工具的主要功能包括:

  1. 實時監控:持續監控指定目錄中的文件變化。
  2. 按類型分組:根據文件擴展名對文件進行分類。
  3. 自動壓縮:當某一類型的文件數量超過設定閾值(默認為5個)時,自動生成壓縮包并將其移動到指定的輸出目錄。
  4. 刪除原文件:為節省空間,壓縮后的原文件會被刪除。
  5. 用戶交互:提供簡單的用戶交互界面,允許用戶隨時停止監控。
實現原理
1. 目錄創建與初始化

首先,確保輸出目錄存在。如果不存在,則自動創建該目錄。這一步驟保證了后續壓縮包有地方存放。

if not os.path.exists(output_directory):os.makedirs(output_directory)print(f"Output directory '{output_directory}' created.")
2. 文件監控與分類

通過os.listdir()獲取指定目錄下的所有文件,并使用os.path.splitext()分離文件名和擴展名。然后,將相同擴展名的文件歸為一組,存儲在一個字典中,以便后續處理。

files = [f for f in os.listdir(directory) if os.path.isfile(os.path.join(directory, f))]
file_groups = {}
for file in files:_, ext = os.path.splitext(file)ext = ext.lower()if ext in file_groups:file_groups[ext].append(file)else:file_groups[ext] = [file]
3. 壓縮歸檔

對于每種類型的文件,當其數量超過5個時,生成一個以當前時間戳命名的壓縮包,并將這些文件添加到壓縮包中。同時,刪除已壓縮的原文件以釋放空間。

for ext, group in file_groups.items():if len(group) > 5:archive_date_num = datetime.datetime.now().strftime("%Y%m%d_%H:%M:%S")archive_prefix = ext.strip('.')archive_name = f"{archive_prefix}_{archive_date_num}.zip"zip_path = os.path.join(output_directory, archive_name)with zipfile.ZipFile(zip_path, 'w') as zipf:for file in group:file_path = os.path.join(directory, file)try:zipf.write(file_path, arcname=file)os.remove(file_path)print(f"Deleted {file_path}")except Exception as e:print(f"Failed to delete {file_path}: {e}")print(f"Created archive {zip_path} with {len(group)} files.")
4. 用戶交互與循環監控

程序會每隔5秒檢查一次文件變化,并詢問用戶是否繼續監控。用戶可以輸入q來退出程序。

user_input = input("Press 'q' to quit, any other key to continue: ")
if user_input.lower() == 'q':print("Program stopped by user.")break
time.sleep(5)
應用場景
  1. 日志文件管理:對于生成大量日志文件的應用,可以定期壓縮舊日志,防止磁盤空間被占用。
  2. 圖片或文檔庫:在圖片或文檔庫中,可以根據文件類型自動整理和歸檔,方便日后查找和管理。
  3. 臨時文件清理:對于頻繁生成臨時文件的環境,可以自動清理不再需要的文件,保持系統整潔。
完整源碼
import os
import datetime
import zipfile
import timedef monitor_and_zip_by_type(directory, output_directory):# 確保輸出目錄存在if not os.path.exists(output_directory):os.makedirs(output_directory)  # 創建輸出目錄print(f"Output directory '{output_directory}' created.")while True:try:# 獲取指定目錄下所有文件files = [f for f in os.listdir(directory) if os.path.isfile(os.path.join(directory, f))]file_groups = {}  # 用于存放不同類型文件的字典# 將文件按擴展名分組for file in files:_, ext = os.path.splitext(file)  # 分離文件擴展名ext = ext.lower()  # 轉換為小寫以統一處理if ext in file_groups:file_groups[ext].append(file)  # 添加到對應擴展名的列表中else:file_groups[ext] = [file]  # 創建新的擴展名列表# 遍歷每種文件類型及其文件列表for ext, group in file_groups.items():if len(group) > 5:  # 如果同類型文件數量超過5個# 獲取當前時間作為壓縮包的日期標識archive_date_num = datetime.datetime.now().strftime("%Y%m%d_%H:%M:%S")archive_prefix = ext.strip('.')  # 使用文件類型作為壓縮包前綴archive_name = f"{archive_prefix}_{archive_date_num}.zip"  # 生成壓縮包名稱zip_path = os.path.join(output_directory, archive_name)  # 壓縮包完整路徑# 創建壓縮包并寫入文件with zipfile.ZipFile(zip_path, 'w') as zipf:for file in group:file_path = os.path.join(directory, file)  # 獲取文件完整路徑try:zipf.write(file_path, arcname=file)  # 寫入文件到壓縮包os.remove(file_path)  # 刪除已壓縮的原文件print(f"Deleted {file_path}")  # 輸出刪除文件的信息except Exception as e:print(f"Failed to delete {file_path}: {e}")  # 捕獲刪除失敗的異常print(f"Created archive {zip_path} with {len(group)} files.")  # 輸出壓縮結果信息except Exception as e:print(f"An error occurred: {e}")  # 捕獲并輸出其他異常# 用戶輸入決定是否繼續監控user_input = input("Press 'q' to quit, any other key to continue: ")if user_input.lower() == 'q':  # 如果用戶輸入'q'則退出print("Program stopped by user.")breaktime.sleep(5)  # 暫停5秒后繼續監控# 獲取用戶輸入的監控目錄和輸出目錄
monitor_directory = input('請輸入監控的目錄:').strip()
if not monitor_directory:  # 如果未輸入,則使用當前工作目錄monitor_directory = os.getcwd()output_directory = input('請輸入壓縮文件的目錄:').strip()
if not output_directory:  # 如果未輸入,則使用當前工作目錄output_directory = os.getcwd()# 啟動監控和壓縮功能
monitor_and_zip_by_type(monitor_directory, output_directory)
結論

通過上述工具,我們可以輕松實現文件的自動化監控與分類壓縮,極大地提高了文件管理的效率和準確性。無論是個人用戶還是企業級應用,都可以從中受益。未來,還可以進一步優化此工具,例如增加更多的配置選項、支持多線程處理等,以滿足更多復雜的需求。


希望這篇文章能幫助你更好地理解這個工具的功能和應用場景。如果有任何問題或改進建議,歡迎隨時交流!

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

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

相關文章

小紅書怎么看ip所屬地?小紅書ip屬地為什么可以變

小紅書,作為當下熱門的社交電商平臺,不僅為用戶提供了豐富的購物與分享體驗,還通過展示用戶IP屬地信息,增強了網絡社交的透明度和真實性。然而,不少用戶發現,小紅書上的IP屬地并非一成不變,這引…

springboot使用hutool captcha +vue實現圖形驗證碼

一、效果 使用hutool captcha實現簡單的圖形驗證碼&#xff0c;可以參考官網概述 | Hutool 二、實現步驟 1、導入依賴 <!--hutool包--> <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.…

2501d,d的優勢之一與C互操作

原文 如前,我已將個人理財包從C移植到D語言,開始時,把里面的一些移植到Rust中,直到我再也受不了了. D和Rust版本中都有讀取從美國運通下載的.csv文件的工具之一,并把交易加載到包含財務數據的輕查數據庫中,試通過使用基于李文距離的算法的模糊比較問題的描述與現有問題,來為每…

vue3+Echarts+ts實現甘特圖

項目場景&#xff1a; vue3Echartsts實現甘特圖;發布任務 代碼實現 封裝ganttEcharts.vue <template><!-- Echarts 甘特圖 --><div ref"progressChart" class"w100 h100"></div> </template> <script lang"ts&qu…

EdgeX規則引擎eKuiper

EdgeX 規則引擎eKuiper 一、架構設計 LF Edge eKuiper 是物聯網數據分析和流式計算引擎。它是一個通用的邊緣計算服務或中間件,為資源有限的邊緣網關或設備而設計。 eKuiper 采用 Go 語言編寫,其架構如下圖所示: eKuiper 是 Golang 實現的輕量級物聯網邊緣分析、流式處理開源…

【AIGC-ChatGPT進階提示詞指令】AI美食助手的設計與實現:Lisp風格系統提示詞分析

引言 在人工智能助手的應用領域中&#xff0c;美食烹飪是一個既專業又貼近生活的方向。本文將詳細分析一個基于Lisp風格編寫的美食助手系統提示詞&#xff0c;探討其結構設計、功能實現以及實際應用效果。 提出你的菜系&#xff0c;為你分析&#xff0c;并生成圖片卡片 提示詞…

智能工廠的設計軟件 應用場景的一個例子:為AI聊天工具添加一個知識系統 之9 重新開始 之2

本文要點 對程序設計而言&#xff1a;前者基于一個自上而下的 分類體系--&#xff08;生物遺傳基因&#xff09;&#xff0c;后者者需要一個收集差異的自下而上的差異繼承路徑--&#xff08;系統繼承源流&#xff09; 就是 廣義和狹義 分類學。 共性對齊 和 差異收集 正是兩者…

MCA:用于圖像識別的深度卷積神經網絡中的多維協同注意力

摘要 大量先前的研究已經表明,注意力機制在提高深度卷積神經網絡(CNNs)性能方面具有巨大潛力。然而,現有的大多數方法要么忽略了在通道和空間維度上同時建模注意力,要么引入了更高的模型復雜度和更重的計算負擔。為了緩解這一困境,本文提出了一種輕量級且高效的多維協同…

halcon中圖像處理及圖像濾波

圖像濾波簡介 圖像濾波的方法主要分為兩大類:空間域方法和頻域方法。 空間域方法是以對圖像的像素直接進行處理為基礎,包括均值濾波、中值濾波、高斯濾波等;頻域方法則是以修改圖像在傅里葉變換空間的值為基礎的,包括高通濾波、低通濾波、同態濾波等。 1.空間域圖像濾波 圖…

【從零開始入門unity游戲開發之——C#篇42】C#補充知識——隨機數(Random)、多種方法實現string字符串拼接、語句的簡寫

文章目錄 一、隨機數1、Random.Next()生成隨機整數示例&#xff1a;生成一個隨機整數生成指定范圍內的隨機整數 2、Random.NextSingle生成隨機浮點數示例&#xff1a;生成隨機浮點數 3、 生成隨機字母或字符示例&#xff1a;生成隨機字母示例&#xff1a;生成隨機小寫字母 二、…

吐卡機開發——指令合集—未來之窗行業應用跨平臺架構

序號指令10A 09 02 01 01 0D DE20A 09 02 02 01 FD DE30A 09 02 03 01 6D DF40A 09 02 04 01 5D DD50A 09 02 05 01 CD DC60A 09 02 06 01 3D DC70A 09 02 07 01 AD DD80A 09 02 08 01 5D D890A 09 02 09 01 CD D9100A 09 02 10 01 5D D2110A 09 02 11 01 CD D3120A 09 02 12 0…

fpga系列 HDL:verilog 常見錯誤與注意事項 位寬不匹配+case 語句中沒有覆蓋所有情況

位寬不匹配問題 信號或操作數的位寬不匹配&#xff0c;可能導致仿真或綜合錯誤。 module top (input wire [3:0] a,output wire [7:0] b );assign b a; endmodulecase 語句中沒有覆蓋所有情況 module top (input wire [1:0] sel,input wire [7:0] a,input wire [7:0] b,in…

Linux中操作中的無痕命令history技巧

當我們需要查看Linux下的操作記錄時&#xff0c;就可以用history命令來查看歷史記錄 1、關閉history記錄功能&#xff0c;如果不想讓別人看到自己在Linux上的操作命令&#xff0c;可以用這個命令 set o history 2、打開history記錄功能 set -o history3、清空記錄 histor…

計算機網絡練習題

學習這么多啦&#xff0c;那就簡單寫幾個選擇題鞏固一下吧&#xff01; 1. 在IPv4分組各字段中&#xff0c;以下最適合攜帶隱藏信息的是&#xff08;D&#xff09; A、源IP地址 B、版本 C、TTL D、標識 2. OSI 參考模型中&#xff0c;數據鏈路層的主要功能是&#xff08;…

優化租賃小程序提升服務效率與用戶體驗的策略與實踐

內容概要 在這個快速發展的商業環境中&#xff0c;租賃小程序成為了提升服務效率和用戶體驗的重要工具。通過對用戶需求的深入挖掘&#xff0c;我們發現他們對于功能的便捷性、響應速度和界面的友好性有著極高的期待。因此&#xff0c;針對這些需求&#xff0c;完善租賃小程序…

【數據結構】樹鏈刨分

1 u v k&#xff0c;修改路徑上節點權值&#xff0c;將節點 uu 和節點 vv 之間路徑上的所有節點&#xff08;包括這兩個節點&#xff09;的權值增加 kk。2 u k&#xff0c;修改子樹上節點權值&#xff0c;將以節點 uu 為根的子樹上的所有節點的權值增加 kk。3 u v&#xff0c;詢…

pandas.Grouper() 在實際項目中非常有用,尤其是在處理時間序列數據、財務數據或多級索引數據時

pandas.Grouper() 在實際項目中非常有用&#xff0c;尤其是在處理時間序列數據、財務數據或多級索引數據時。以下是幾個實際場景的例子&#xff0c;展示了如何使用 pandas.Grouper() 進行數據分組&#xff0c;并用數值示例說明。 1. 按月分組進行銷售數據匯總 場景&#xff1…

private static final Logger log = LoggerFactory.getLogger()和@Slf4j的區別

一、代碼方面 - private static final Logger log LoggerFactory.getLogger()方式 詳細解釋 這是一種傳統的獲取日志記錄器&#xff08;Logger&#xff09;的方式。LoggerFactory是日志框架&#xff08;如 Log4j、Logback 等&#xff09;提供的工廠類&#xff0c;用于創建Lo…

醫療數倉Hive安裝部署

Hive安裝部署 Hive安裝部署 1&#xff09;把hive-3.1.3.tar.gz上傳到linux的/opt/software目錄下 2&#xff09;解壓hive-3.1.3.tar.gz到/opt/module/目錄下面 [atguiguhadoop102 software]$ tar -zxvf /opt/software/hive-3.1.3.tar.gz -C /opt/module/3&#xff09;修改hive…

通俗易懂的講一下Vue的雙向綁定和React的單向綁定

1.Vue 的雙向綁定&#xff1a; <template><!-- 輸入框和數據自動綁定&#xff0c;就像連體嬰兒&#xff0c;一個動另一個也動 --><input v-model"message"><p>{{ message }}</p><!-- 完整表單示例 --><form><!-- 所有…