今天下载了一份数据集,想放在faster-rcnn上跑一下。但数据集的目录结构是这种形式的
dataset/
├── class1
│ ├── img
│ │ └── img1_1.jpg
│ └── xml
│ └── img1_1.xml
├── class2
│ ├── img
│ │ └── img2_1.jpg
│ └── xml
│ └── img2_1.xml
└── class3
├── img
│ └── img3_1.jpg
└── xml
└── img3_1.xml
为了方便faster-rcnn的输入,我需要把数据集整理成这种目录结构
dataset_after_settle/
├── img
│ ├── img1_1.jpg
│ ├── img2_1.jpg
│ └── img3_1.jpg
└── xml
├── img1_1.xml
├── img2_1.xml
└── img3_1.xml
为了实现这个功能,写了一个python脚本来处理,代码如下
############################################################
# author : swings
#
# date : 2018-08-14
#
# Parameters : argv[1] 源目录
# argv[2] 用于匹配文件名的模式串,比如'.txt'
# argv[3] 目标目录
#
# description: 这个脚本的作用是从argv[1]中寻找文件名能匹配
# argv[2]的所有文件,并不带目录结构地把它们复
# 制到argv[3]
############################################################
import os, sys
import shutil
count = 0
def search(curpath, s, despath):
global count
L = os.listdir(curpath)
for subpath in L:
# subpath路径是目录,递归查找文件
if os.path.isdir(os.path.join(curpath, subpath)):
newpath = os.path.join(curpath, subpath)
search(newpath, s, despath)
# subpath是文件
elif os.path.isfile(os.path.join(curpath, subpath)):
if s in subpath:
shutil.copyfile(os.path.join(curpath, subpath), os.path.join(despath, subpath))
count += 1
def main():
workingpath = sys.argv[1]
s = sys.argv[2]
despath = sys.argv[3]
search(workingpath, s, despath)
print('copy %d files' % count)
if __name__ == '__main__':
main()
使用方法如下
$ python3 file_copy.py data_set/ .xml dataset_after_settle/xml/
$ python3 file_copy.py data_set/ .jpg dataset_after_settle/jpg/