欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-09 10:00:11
...
# !/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 复制完毕" % (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()

reference: https://www.jb51.net/article/180277.htm

 

相关标签: python