• 用oop编程实现文件自动解压整理


    用oop编程实现文件自动解压整理,同时监控2个目录并处理zip文件,解压后一个文件夹删除zip文件,另一个文件夹将zip文件移动到某一目录中。
    记得要在主程序中加入下面2行代码,保证进程一直存在:
    while True:
    pass

    import time
    import os
    import threading    # 使用多线程
    import shutil
    
    class ArchiveMonitor:
    
        # 初始化参数
        def __init__(self,config):
            self.name = config['name']
            self.monitor_path = config['monitor_path']
            self.interval = config['interval']
    
        # 扫描监控路径文件夹,返回zip文件路径的列表
        def scan_file(self):
            zips = []
            for f in os.listdir(self.monitor_path):
                if f.endswith('.zip'):
                    f_path = os.path.join(self.monitor_path, f)
                    zips.append(f_path)
            if len(zips) == 0:
                return None
            else:
                return zips
    
        # 解压zip文件,存放到同一目录下的同名文件夹中
        def unzip_them(self,zips_path):
            for zip in zips_path:
                unziped_dir = zip.split('.')[0]
                os.makedirs(unziped_dir,exist_ok=True)
                shutil.unpack_archive(zip,unziped_dir)
                print(zip,'已解压,解压文件放在:',unziped_dir)
    
        # 删除zip文件
        def del_zips(self,zips_path):
            for zip in zips_path:
                os.remove(zip)
                print(zip,'已删除')
    
        # 移动zip文件
        def move_zips(self,zips_path,target_dir='package'):
            for zip in zips_path:
                target_path = os.path.join(self.monitor_path,target_dir)
                os.makedirs(target_path,exist_ok=True)
                shutil.move(zip,target_path)
    
        # def run(self):
        #     if self.name == "download":
        #         while True:
        #             zips = self.scan_file()
        #             if zips:
        #                 self.unzip_them(zips)
        #                 self.move_zips(zips)
        #             time.sleep(self.interval)
    
        def run(self):
            def _run():
                print('进入_run函数了')
                print('self.name == "download"?',self.name == "download")
                print('self.name == "Desktop"?',self.name == "Desktop")
                if self.name == "download":
                    while True:
                        print('进入download文件夹的while True了')
                        zips = self.scan_file()
                        if zips:
                            self.unzip_them(zips)
                            self.move_zips(zips)
                        print('等待20s...')
                        time.sleep(self.interval)
                elif self.name == "Desktop":
                    while True:
                        print('进入desktop文件夹的while True了')
                        zips = self.scan_file()
                        if zips:
                            self.unzip_them(zips)
                            self.del_zips(zips)
                        print('等待10s...')
                        time.sleep(self.interval)
            print('进入run函数了')
            t = threading.Thread(target=_run)   #我理解就是开启一个线程,运行_run函数
            t.daemon = True  # 开启守护线程,即本线程是守护线程,可随程序关闭而关闭
            print('thread建好了,还没开启')
            t.start()
    
    # am = ArchiveMonitor(CONFIGS[1])
    # am.run()
    
    CONFIGS = [
        {
            "name":"Desktop",
            "monitor_path":'C:/Users/lori/Desktop/',
            "interval":10
        },
        {
            "name": "download",
            "monitor_path": 'C:/Users/lori/Desktop/python52project/test',
            "interval":20
        },
    ]
    #if __name__ == "__main__":
    monitors = [ArchiveMonitor(c) for c in CONFIGS]
    for m in monitors:
        m.run()
    while True:
        pass
    

      

  • 相关阅读:
    shell习题第21题:计算数字的个数
    shell习题第20题:统计文件大小
    萌新小白
    编程第一天
    萌新报道
    linux下安装php扩展pdo_oci和oci8
    安装Hadoop伪分布式踩过的坑
    zabbix安装过程
    MySQL_索引
    mysql复制
  • 原文地址:https://www.cnblogs.com/djlbolgs/p/12513569.html
Copyright © 2020-2023  润新知