YOLO3 + Python3.6 深度学习篇(附)- 文件的重组 - 移动 - 复制

从搜集数据的角度来看,越多的数据理论上说会有越高的准确率,但是每次爬虫找下来的图片只能够有百来张,如果分了很多不同的文件夹之后,为了迅速的将它们集合成完整的 “单一个” 资料夹,下面代码可以把多个文件夹里面的文件汇总到一个指定的文件夹中,不过还是有些前提条件需要遵守。

使用时的刚性规则:

  • 指定的文件夹必须提前准备好,并且是跟要被汇总的文件夹不同的文件夹,要是希望即便是一个不存在的资料夹路径,也可以自动创出来的模式,可以自己用 os.mkdir() 函数修改。


运用到的模块包有:

The codes are written below in practice:

import os
import shutil

# 首先定义一共有多少个文件夹需要被重新整合,并把这些路径放到下面这个空的 list 里面
folder_num = int(input('How many folders to combine: '))
folder_path_list = []

# 贴入文件夹路径的时候,需要先确定这个文件夹是否存在,如果不存在,那就要不断重新输入到对为止
for i in range(folder_num):
    folder_path = str(input('The folder path: '))
    while not os.path.exists(folder_path):
        print('This is not a correct path.')
        folder_path = str(input('The exact folder path: '))
    else:
        folder_path_list.append(folder_path)

# 设定好一个已经存在的文件夹路径作为文件储存位置,如果文件夹不存在或是文件夹属于待合并的文件夹,则重新定义
save_path = input('The directory to hold the combined files: ')
while not os.path.exists(save_path) or save_path in folder_path_list:
    print('This directory is not allowed. Change another one.')
    save_path = input('The directory to hold the combined files: ')

# 创造一个计数器,初始数字就是用来汇总的资料夹里面文件数量大小
file_num = int(len(os.listdir(save_path)))
# 遍历由路径组成的 list,处理方式分别为 “剪下” 或是 “复制” 两种,到指定储存文件夹里面
for n, folder in enumerate(folder_path_list):
    cut_copy = str(input(
        'As for path {}, Cut for "x" and Copy for "c": '.format(n + 1)))

    # 如果按下的键盘按键是 'x',对所有原文件夹里面的文件以 full_path 的路径规范移动同时并修改档名到指定文件夹
    if cut_copy == 'x':
        for m, file in enumerate(os.scandir(folder)):
            new_ordered_name = '{:06}'.format(m + 1 + file_num)
            extend_name = os.path.splitext(file.name)[1]
            new_file_name = new_ordered_name + extend_name

            full_path = os.path.join(save_path, new_file_name)
            shutil.move(file.path, full_path)

    # 同理拷贝功能,shutil.copy 和 shutil.move 都有以一个新的名字移动到指定位置的功能,这样就不怕同名字不同原路径的文件移动时彼此冲突了
    elif cut_copy == 'c':
        for m, file in enumerate(os.scandir(folder)):
            new_ordered_name = '{:06}'.format(m + 1 + file_num)
            extend_name = os.path.splitext(file.name)[1]
            new_file_name = new_ordered_name + extend_name

            full_path = os.path.join(save_path, new_file_name)
            shutil.copy(file.path, full_path)

    # 如果不是按下拷贝或是剪下的按键,则不断重来直到按了其中一个为止
    while cut_copy not in ['x', 'c']:
        print('There are only two option here.')
        cut_copy = str(input(
            'As for path {}, Cut for "x" and Copy for "c": '.format(n + 1)))

    # 每次循环的尾端更新计数器里面的数字,看又有多少文件被移入了汇总的文件夹
    # 在用文件数量编号命名的时候可以继续上个文件夹结尾的数字更新档名(避开从头开始的尴尬场面)
    file_num = file_num + len(os.listdir(folder))

由于花的时间不多,没有完整透彻的把整个 module 的相关函数都研究一遍,因此程序脚本跑起来会有些限制条件没有解决,但是用的时候注意的话还算是一个通用的脚本。


思路整理与步骤:

  1. 定义问题:不知道有几个文件夹的情况下,要把这些文件夹里面的文件全部整合到一个新的文件夹中,并且自动依照档案的数量对文件命名。
  2. 把不知道的部分作为 input 项让使用者根据当时情况输入,并且可以根据每次需要的量做调整,使整个代码弹性增大。
  3. 设定好一切路径之后,接着选择是剪下还是复制该文件的内容物。
  4. 到了所有文件合并到了一个指定文件夹之后,对其重新命名成为一个有序的整体。


制作小工具的代码可以很好的训练代码的使用规则与函数逻辑,像是个 “生活小品文” 的角色哈。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值