文档章节

python 的文件目录拷贝转移,自动递归目录建立目录

捍卫机密
 捍卫机密
发布于 2016/11/22 09:56
字数 493
阅读 379
收藏 0

 

 

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Created by weilai on 2016/11/21

__author__ = 'weilai'

"""
@version: v0.5
@author: weilai
@license: Apache Licence
@contact:
@site: http://showmymind.com/
@software: PyCharm Community Edition
@file: wl_copy.py
@time: 2016/11/21 21:50
"""

import os
import shutil
import datetime
import time


class file_entity:
    file_path = ''
    file_name = ''


    def __init__(self, path, file):
        self.file_path = path
        self.file_name = file


class copy_work:

    def __init__(self):
        self.source_path = ''
        self.target_path = ''
        self.source_file_list = []
        self.target_file_list = []
        self.interval = '\\'
        self.filter = [self.suffix_filter, self.time_filter]
        # 定义 拷贝文件后缀和时间范围
        # 文件后缀,以下文件后缀会被拷贝到目标目录
        self.file_suffix = [".dll", ".pdb", ".xml"]
        # 时间范围 以下数字分钟以内的修改文件才会被转移
        self.time_range = 30
        # 发布后提示语,可直接拷贝到QQ目录通知相关人员提取
        self.report_str = "\n  已经发布 请提! 谢谢!!(v0.5)"
        self.version = '0.5'
        self.total_count = 0
        self.copy_all = False

    def load_source(self, curr_path, deep=1):
        self.total_count = 0;
        file_list = os.listdir(curr_path)
        for num in range(len(file_list)):
            filename = file_list[num]
            if os.path.isdir(curr_path + self.interval + filename):
                self.load_source(curr_path + self.interval + filename, deep + 1)
            else:
                curr = file_entity(curr_path, filename)
                curr_f_name = curr.file_path + self.interval + curr.file_name
                if(self.filter[0](curr_f_name) and self.filter[1](curr_f_name)):
                    self.source_file_list.append(curr)
                    self.total_count += 1
                    print(curr_f_name)

    def make_target_list(self):
        for source_file in self.source_file_list:
            tar_path = source_file.file_path.replace(self.source_path, self.target_path)
            curr = file_entity(tar_path, source_file.file_name)
            self.target_file_list.append(curr)

    def move_file(self, sourceDir, targetDir):
        """拷贝文件,从源目录到目标目录"""
        shutil.copy(sourceDir, targetDir)

    def mkdir(self, path):
        """创建目录"""
        # 引入模块
        path = path.strip()
        path = path.rstrip("\\")
        isExists = os.path.exists(path)
        if not isExists:
            os.makedirs(path)

    def suffix_filter(self, full_path):
        if self.copy_all:
            return True
        is_filtrate = False
        for s in self.file_suffix:
            last_pos = len(s)
            last_suffix = full_path[-last_pos:]
            # print(last_suffix + s)
            if last_suffix == s:
                is_filtrate = True
                break
        return is_filtrate

    def time_filter(self, file_path):
        is_filtrate = False
        now = datetime.datetime.now()
        just_now = now - datetime.timedelta(minutes=self.time_range)
        curr_file_m_time = self.get_filem_time(file_path)
        # print(file_path + "--" + curr_file_m_time.strftime('%Y-%m-%d %H:%M:%S'))
        if curr_file_m_time > just_now:
            is_filtrate = True
        return is_filtrate

    def get_filem_time(self, file_path):
        temp_file_m_time = time.localtime(os.stat(file_path).st_mtime)
        file_m_time = datetime.datetime(*tuple(temp_file_m_time)[:6])
        return file_m_time

    def copy_file(self, source, target):
        self.source_path = source
        self.target_path = target
        self.mkdir(self.target_path)
        self.load_source(source)
        self.make_target_list()

        for i in range(len(self.source_file_list)):
            sou_f = self.source_file_list[i]
            tar_f = self.target_file_list[i]
            sou_full = sou_f.file_path + self.interval + sou_f.file_name
            tar_full = tar_f.file_path + self.interval + tar_f.file_name
            self.mkdir(tar_f.file_path)
            self.move_file(sou_full, tar_full)
        #self.report()

    def report(self):
        print(self.source_path + self.report_str)


# 用法
cw = copy_work()
# 设置 文件后缀过滤,此后缀才会被拷贝
cw.file_suffix = [".dll", ".pdb", ".xml"]
# 设置 时间,修改时间是30分钟以内的,才会被拷贝
cw.time_range = 30
# 执行拷贝
cw.copy_file('Z:\\V001\\web\\201611211920', 'E:\\x')

 

© 著作权归作者所有

共有 人打赏支持
捍卫机密
粉丝 5
博文 126
码字总数 45015
作品 0
成都
程序员
windows下编译mxnet并使用C++接口开发

大多数情况下,mxnet都使用python接口进行机器学习程序的编写,方便快捷,但是有的时候,需要把机器学习训练和识别的程序部署到生产版的程序中去,比如游戏或者云服务,此时采用C++等高级语言...

u012234115
05/29
0
0
python pyrex windows 编译C可执行文件

python写成py文件经过处理转化成pyx文件,以及函数说明文件pyi使用pyrexc.py编译成对应模块的c和h文件 然后写一个main的cpp文件,使用cmake产生vs工程,使用incredBuild编译工程。 以下是一个...

悠米海
2012/09/25
0
0
python 驱动开发环境实践

我平常使用Gvim来写代码,所以先配置Vim的python开发环境。 一、配置Vim环境 模版文件准备 为了在vim中能够自动建立测试文件框架,需要建立模版文件,假设我在 目录下建立需要的模版文件,目...

BaiLiang
2014/07/07
0
0
十行代码--用python写一个USB病毒 (知乎 DeepWeaver)

昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序。查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索关键词usb autorun)到。但是,如果我想,比...

p柯西
06/19
0
0
[学习] Apache + mod_python + Django Step by Step

鉴于网上关于 Python 框架 Django 的 Apache + mod_python + Django 环境详细安装加实例文档还是比较难找到,所以石头在这边写一个文档与初学 Django 的同志们以共勉:) 1、下载需要模块。 ...

晨曦之光
2012/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java日期和时间获取问题

获取年月日时分秒 Calendar cal = Calendar.getInstance();//获取年int year = cal.get(Calendar.YEAR);//获取月,范围是0-11,最后使用需+1int month = cal.get(Cal...

lanyu96
24分钟前
7
0
Ceph学习笔记2-在Kolla-Ansible中使用Ceph后端存储

环境说明 使用Kolla-Ansible请参考《使用Kolla-Ansible在CentOS 7单节点上部署OpenStack Pike》; 部署Ceph服务请参考《Ceph学习笔记1-Mimic版本多节点部署》。 配置Ceph 以osdev用户登录: ...

LastRitter
28分钟前
6
0
OSChina 周二乱弹 —— 老司机表示右手无处安放

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @花间小酌 :分享李宗盛的单曲《鬼迷心窍》--春风再美也比不上你的笑 《鬼迷心窍》 - 李宗盛 手机党少年们想听歌,请使劲儿戳(这里) 每天早...

小小编辑
40分钟前
225
5
复习2

10月22日任务 awk 中使用外部shell变量 awk 合并一个文件 把一个文件多行连接成一行 awk中gsub函数的使用 awk 截取指定多个域为一行 过滤两个或多个关键词 用awk生成以下结构文件 awk用print...

hhpuppy
48分钟前
5
0
原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
62
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部