【python】文件操作-拷贝含有某一关键词的文件夹及其文件(含子文件夹)到指定目录

import os
import sys
import re 
import time

copyFileCounts = 0

def cp_file(parent_dir, out_dir, keyword):    
    all_dirs = [] # 所有的目录文件名
    for root, dirs, files in os.walk(parent_dir):
        all_dirs.append(root)  # 当前目录路径
    dir_num = len(all_dirs)
    desired_dirs = filter_dir(all_dirs, keyword)

    mkdir(out_dir)
    for i in range(len(desired_dirs)):
        out_sub_dir = ""
        split_des_dir = re.split("\\\\", desired_dirs[i])

        # 上级目录
        out_sub_dir += split_des_dir[-3]
        out_sub_dir += '\\'
        out_sub_dir += split_des_dir[-2]
        out_sub_dir += '\\'
        out_sub_dir += split_des_dir[-1]
        out_sub_dir += '\\'

        # 复制文件到对应路径
        copyFiles(desired_dirs[i], out_dir + "\\" + out_sub_dir)

# 文件滤除
def filter_dir(src_dirs, keyword):
    dir_num = len(src_dirs)
    desired_dirs = []

    for i in range(dir_num):
        keyword_count = 0 # 关键词满足数目
        src_dir = ""
        src_dir += src_dirs[i]
        cur_dir_name = re.split('\\\\', src_dir)[-1] # 当前目录名(不含上级)
        split_words = re.split('[ ]|-', cur_dir_name) #多字符分割
        for j in range(len(split_words)-1,-1,-1):
            if(split_words[j] == keyword[0]):
                keyword_count += 1
            if (split_words[j] == keyword[1]):
                keyword_count += 1
            if(keyword_count == 2):
                desired_dirs.append(src_dirs[i])
                break
    return desired_dirs

# 创建目录
def mkdir(path):
    path = path.strip()
    path = path.rstrip("\\")
    # 判断路径是否存在
    isExists=os.path.exists(path)
    # 不存在
    if not isExists:
        # 创建目录操作函数
        os.makedirs(path)

# 文件拷贝
def copyFiles(sourceDir, targetDir):
    global copyFileCounts
    print (sourceDir)
    print (u"%s 当前处理文件夹%s已处理%s 个文件" %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), sourceDir,copyFileCounts))
    for f in os.listdir(sourceDir):
        sourceF = os.path.join(sourceDir, f)
        targetF = os.path.join(targetDir, f)
        if os.path.isfile(sourceF):
            #创建目录
            if not os.path.exists(targetDir):
                os.makedirs(targetDir)
            copyFileCounts += 1
            #文件不存在,或者存在但是大小不同,覆盖
            if not os.path.exists(targetF) or (os.path.exists(targetF) and (os.path.getsize(targetF) != os.path.getsize(sourceF))):
                #2进制文件
                open(targetF, "wb").write(open(sourceF, "rb").read())
                print (u"%s %s 复制完毕" %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), targetF))
            else:
                print (u"%s %s 已存在,不重复复制" %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), targetF))
        if os.path.isdir(sourceF):
            copyFiles(sourceF, targetF)
            

if __name__ == '__main__':
    parent_dir = 'C:\\Users\\xxx\\Desktop\\TGCA-GBM'
    keyword = ['Diffusion','Weighted'] # 同时含有两个关键字
    out_dir = 'C:\\Users\\xxx\\Desktop\\DstTmp'
    cp_file(parent_dir, out_dir, keyword)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值