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)
【python】文件操作-拷贝含有某一关键词的文件夹及其文件(含子文件夹)到指定目录
最新推荐文章于 2024-07-03 17:36:34 发布