实用python代码-01

实用python代码-01-监听文件变化

【需求】对电脑硬盘中发生变换的文件实现监听,并记录对应的日志;
【目的】1)知道硬盘又多了那些大文件;2)方便硬盘不足时安心的删除数据;

实现代码

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import datetime
import time
import os

class Watcher:
    def __init__(self, directory_to_watch):
        self.observer = Observer()
        self.directory_to_watch = directory_to_watch

    def run(self):
        event_handler = Handler()
        self.observer.schedule(event_handler, self.directory_to_watch, recursive=True)
        self.observer.start()
        try:
            while True:
                time.sleep(5)  # 适当调整睡眠时间,以便不过于频繁地轮询
        except KeyboardInterrupt:
            self.observer.stop()
            print("Observer Stopped")

        self.observer.join()

class Handler(FileSystemEventHandler):

    @staticmethod
    def on_modified(self, event):
        if not event.is_directory:
            print(f"File {event.src_path} has been modified.")
            if os.path.getsize(event.src_path) > 50 * 1024 * 1024:  # 50MB
                print(f"File size is greater than 50MB: {os.path.getsize(event.src_path)} bytes")

    @staticmethod
    def on_created(event):
        if not event.is_directory:
            print(f"File created: {event.src_path} at {datetime.datetime.now()}")

    @staticmethod
    def on_deleted(event):
        if not event.is_directory:
            print(f"File deleted: {event.src_path} at {datetime.datetime.now()}")

    @staticmethod
    def on_moved(event):
        if not event.is_directory:
            print(f"File moved from {event.src_path} to {event.dest_path} at {datetime.datetime.now()}")

        # 检查文件名是否改变
        if event.src_path != event.dest_path:
            print(f"File renamed from {os.path.basename(event.src_path)} to {os.path.basename(event.dest_path)}")

if __name__ == "__main__":
    path_to_watch = "D:/"
    print(f"Starting to monitor for changes in {path_to_watch}")
    w = Watcher(path_to_watch)
    w.run()

【解释】
1)class Watcher:就是实现对应监听功能类;

  • 初始化方法先实例化对应的Obeserver类和定义对应的属性存储文件夹的路径;
  • run方法定义了Watcher具体执行的代码,self.observer.schedule表示调度器(方便对监听到的内容执行相关操作),event_handle是监听到需要执行的任务;
  • observer.start()开启任务,observer.stop()关闭任务(手动结束任务);
  • 使用while True循环监执行,使程序休眠5s;observer是另外一个线程,所以while True和observer执行是两个不同的线程;

2)class Handler(FileSysstemEventHandler)继承了FileSysstemEventHandler,按照自己的逻辑重写了相关方法;

  • on_modified是文件修改时产生对应的监听,通过event.src_path获取对应的文件的路径,并判断文件的大小是否超过50MB;(这一步可以结合其他的来用);对应的日志可以选择打印或持久化;
  • on_created是创建文件时产生的监听;
  • on_deleted是删除文件时产生的监听;
  • on_moved是移动文件时产生的监听;

3)main函数中实例化对应的Watcher类,并调用对应run方法;

开启windows自动执行程序

1)win + r打开“运行”对话框,输入taskschd.msc
在这里插入图片描述
2)点击创建基本任务在这里插入图片描述3)然后继续点击创建“基本任务“,输入对应的名称和描述后点击“下一步”
在这里插入图片描述
4)创建对应的“触发器”,设置对应的“触发时间”;触发时间就是说多久执行一次,可以更据需求设置想要的触发周期;
在这里插入图片描述
在这里插入图片描述
5)选择触发器执行的“任务”,这你选择“启动程序”;
在这里插入图片描述6)
6)选择刚才代码的所在位置,可以设置相关参数(笔者暂时不知道怎么设置)
在这里插入图片描述
7)点击“完成”即可
在这里插入图片描述
8)查看触发器和其他一些操作;
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值