用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

  

原文地址:https://www.cnblogs.com/djlbolgs/p/12513569.html