python拷贝文件夹到一个目录,或者按目录层级创建拷贝

# !/usr/bin/env python

# -*- coding: utf-8 -*-

import os

from glob2 import glob

from xml.dom.minidom import parse

import shutil

from imutils import paths

from tqdm import tqdm

import xml

from xml.dom import minidom

import codecs

import cv2

import numpy as np

# 拷贝一个文件夹下所有文件,到另一个目录下, dest 不根据 src 文件夹目录层级来创建,只放到一个目录下

def copyOneFolderAllFile():

     src_dir = r''

     src_all_file = list(paths.list_files(src_dir))

     dest_dir = r''

     for src_file in tqdm(src_all_file):

         src_dir, src_name = os.path.split(src_file)

         dest_path = os.path.join(dest_dir, src_name)

         shutil.copyfile(src_file, dest_path)

     print('Finish')

import os

import time

copyFileCounts = 0

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 复制完毕 "外汇跟单gendan5.com % (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)

     print('Finish')

# 拷贝一个文件夹下所有文件,到另一个目录下, dest 根据 src 文件夹目录层级来创建

def copyDir():

     sourceDir = r''

     targetDir = r''

     copyFiles(sourceDir, targetDir)

# 根据 split_num 的个数,创建 split_num 个文件夹,把数据随机分配到这些文件夹中

def splitFile():

     split_num = 9 # 需要分几个文件夹

     org_dir = r''

     save_root = r''

     all_img = list(paths.list_images(org_dir))

     random.shuffle(all_img) # 打乱

     dir_num = int(len(all_img) / split_num)

     num_dir = 0

     for i in tqdm(range(len(all_img))):

         img_name = os.path.split(all_img[i])[1]

         save_dir = os.path.join(save_root, str(num_dir))

         if not os.path.exists(save_dir):

             os.mkdir(save_dir)

         save_path = os.path.join(save_dir, img_name)

         org_path = os.path.join(org_dir, img_name)

         shutil.copyfile(org_path, save_path)

         if ((i + 1) % dir_num) == 0:

             num_dir += 1

         if num_dir == split_num:

             num_dir -= 1

     print('Finish')

if __name__ == '__main__':

     copyDir()


请使用浏览器的分享功能分享到微信等