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效果

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

  • 相关阅读:
    ztree学习---将默认勾选的展开
    CentOS之RPM
    CentOS之文档的压缩与打包
    CentOS之Vim
    CentOS用户和用户组管理
    Linux CentOS更改文件的权限
    CentOS的文件属性:命令 ls -l
    CentOS命令
    Java解析excel
    easyUI的combotree的树的懒加载。
  • 原文地址:https://www.cnblogs.com/welan/p/13732836.html
Copyright © 2011-2022 走看看