zoukankan      html  css  js  c++  java
  • python实现随机复制若干个文件到新目录

    python实现随机复制若干个文件到新目录

    1说明

    1.1 目的

    随机选择一个文件下的若干个文件,并将文件复制到新文件夹下

    1.2 要求

    需要将random_select_and_copy_file.py文件放置在父目录下,并选定相应的文件夹,比如需要选择train文件夹下的若干个图片
    目录结构

    图片文件:

    注意:并且默认新生成存放文件的目录为new_train,所以该路径下不能有已存在new_train目录

    2代码实现

    
    from shutil import copyfile
    
    import random
    import os
    
    
    def random_select_and_copy_files(dir_name=None, select_number=0):
        '''
        随机从dir_name目录中选择select_number个文件并复制到new_dir_name目录下
        :param dir_name: 待选择文件的目录名
        :param select_number: 随机选择的文件数量
        :return: None
        '''
    
        # 处理输入目录名异常
        try:
            dir_name is None or dir_name not in os.listdir(os.getcwd())
        except:
            print("输入目录名错误")
    
        dir_path = os.path.join(os.getcwd(), dir_name)  # 获取文件目录路径
        files_list = os.listdir(dir_path)  # 生成文件名列表
        files_number = len(files_list)
    
        # 处理输入数量异常
        try:
            select_number > files_number
        except:
            print("选择文件超过原本数量")
    
        generate_list = random.sample(files_list, select_number)  # 随机选取文件
    
        # 生成存放文件新目录,默认以new开头
        new_dir_path = os.path.join(os.getcwd(), 'new_'+dir_name)
        os.mkdir(new_dir_path)
    
        success_number = 0  # 记录成功数量
        success_list = []  # 记录成功文件
    
        # 复制文件并记录
        for file_name in generate_list:
            orl_file_path = os.path.join(dir_path, file_name)
            new_file_path = os.path.join(new_dir_path, file_name)
            copyfile(orl_file_path, new_file_path)  # 复制文件
    
            success_list.append(file_name)
            success_number += 1
            if success_number % 100 == 0:
                print("success", success_number)
    
        # 给出提示信息并给出未成功文件
        if success_number == select_number:
            print("all", select_number, "finish")
        else:
            print("unfinished")
            error_list = []
            for file_name in files_list:
                if file_name not in success_list:
                    error_list.append(file_name)
            print(error_list, 'error', sep='
    ')
    
    
    
    if __name__ == "__main__":
        random_select_and_copy_files("train", 10)
    
    
    

    3效果

    生成新目录,并且随机拷贝若干个文件到新目录

  • 相关阅读:
    解释机器学习模型的一些方法(一)——数据可视化
    机器学习模型解释工具-Lime
    Hive SQL 语法学习与实践
    LeetCode 198. 打家劫舍(House Robber)LeetCode 213. 打家劫舍 II(House Robber II)
    LeetCode 148. 排序链表(Sort List)
    LeetCode 18. 四数之和(4Sum)
    LeetCode 12. 整数转罗马数字(Integer to Roman)
    LeetCode 31. 下一个排列(Next Permutation)
    LeetCode 168. Excel表列名称(Excel Sheet Column Title)
    论FPGA建模,与面向对象编程的相似性
  • 原文地址:https://www.cnblogs.com/welan/p/13732836.html
Copyright © 2011-2022 走看看