zoukankan      html  css  js  c++  java
  • 文件夹同步

    # coding=utf-8
    
    import os
    import sys
    import time
    import re
    import shutil
    
    class CLASS_WALK_FILE:
        def __init__(self, max_size=1024):
            self.m_max_size = max_size
            self.m_log_fp = open("dir_sync.txt", 'w')
    
        def set_src_path(self, src_path):
            self.m_src_path = src_path
    
        def set_dst_path(self, dst_path):
            self.m_dst_path = dst_path
    
        def set_file_filter(self, file_filter):
            self.m_file_filter = file_filter
            
        def show_file_info(self, src_file):
            sp = os.path.split(src_file)
            print(sp[0], sp[1])
            print("size:", os.path.getsize(src_file))
            print("created:", time.ctime(os.path.getctime(src_file)))
            print("modified:", time.ctime(os.path.getmtime(src_file)))
    
        def file_need_copy(self, src_file, dst_file):
            suffix = os.path.splitext(src_file)[-1]
            if suffix in self.m_file_filter:
                return 0
            if os.path.exists(dst_file) == False:
                return 1
            if os.path.getsize(src_file) != os.path.getsize(dst_file):
                log_info = "
     differ file size %s"%(src_file)
                self.m_log_fp.write(log_info)
                return 1
            
        def copy_file(self, src_file, dst_file):
            sp = os.path.split(dst_file)
            if os.path.exists(sp[0]) == False:
                os.makedirs(sp[0])
            if self.file_need_copy(src_file, dst_file):
                log_info = "
    copy file %s 
     => %s"%(src_file, dst_file)
                self.m_log_fp.write(log_info)
                shutil.copy(src_file, dst_file)
    
        def handle_file1(self, src_file):
            if os.path.getsize(src_file) < self.m_max_size:
                return
            dst_file = src_file.replace(self.m_src_path, self.m_dst_path)        
            self.copy_file(src_file, dst_file)
                
        def walk_file1(self, src_path=0):
            if src_path == 0:
                src_path = self.m_src_path
            list = os.listdir(src_path)
            print("walk_file1 handle dir ", src_path)
            log_info = "
    walk_file1 handle dir %s"%(src_path)
            self.m_log_fp.write(log_info)
            for fi in list:
                filepath = os.path.join(src_path,fi)
                if os.path.isdir(filepath):
                    self.walk_file1(filepath)
                else:
                    self.handle_file1(filepath)
    
        def handle_file2(self, dst_file):
            src_file = dst_file.replace(self.m_dst_path, self.m_src_path)        
            if os.path.exists(src_file) == False:
                #print("delet file ", dst_file)
                log_info = "
     delete file %s"%(dst_file)
                self.m_log_fp.write(log_info)
                os.remove(dst_file)
            
        def walk_file2(self, dst_path=0):
            if dst_path == 0:
                dst_path = self.m_dst_path
            list = os.listdir(dst_path)
            print("walk_file2 handle dir ", dst_path)
            log_info = "
    walk_file2 handle dir %s"%(dst_path)
            self.m_log_fp.write(log_info)
            for fi in list:
                filepath = os.path.join(dst_path,fi)
                if os.path.isdir(filepath):
                    self.walk_file2(filepath)
                else:
                    self.handle_file2(filepath)
    
                    
    my_class = CLASS_WALK_FILE(10*1000)
    
    filter_list = [".exe", ".bin"]
    my_class.set_file_filter(filter_list)
    
    my_class.set_src_path("F:\07_ebook\vdisk")
    my_class.set_dst_path("\\192.168.31.1\文档\vdisk")
    
    #if not exist in src or differ from src, copy to dst
    my_class.walk_file1() 
    
    #if not exist in src, delete dst
    my_class.walk_file2() 
  • 相关阅读:
    表变量和临时表的比较
    表变量和临时表
    微信小程序(五)
    微信小程序(四)开发框架
    微信小程序(三)开发框架
    微信小程序(二)
    微信小程序(一)
    菜鸡的Java笔记第二
    C#中的委托和事件
    在GridView控件里面绑定DropDownList控件
  • 原文地址:https://www.cnblogs.com/soul-stone/p/6792746.html
Copyright © 2011-2022 走看看