python複製資料夾到一個目錄,或者按目錄層級建立複製

專注的阿熊發表於2021-07-05

# !/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()


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2779780/,如需轉載,請註明出處,否則將追究法律責任。

相關文章