由于需要将三个文件夹下的图片拷贝到一个文件夹下,并按照1.jpg,2.jpg,3.jpg,… 的连续的序列排列,因此,先将三个文件夹下的图片复制到一个JPEGImages的文件下,然后再新建一个small文件夹,利用下面的代码进行复制和重命名,其中,用到了以下几个模块和功能:
(1)shutil模块
copyfile功能,复制文件
(2)os模块
listdir功能,将路径下的所有文件列出来
path.exists功能,判读文件是否存在
(3)生成器功能
a = [i+bias for i in range(n)],生成从bias到bias+n的序列
#coding=utf-8
#将jpg复制并重命名
import os,shutil
path_src = '/media/win_data/gray3/VOC2007_Small/JPEGImages/'
path_dst = '/media/win_data/gray3/VOC2007_Small/small/'
n = os.listdir(path_src)
len0 = len(n)
#print(len0)
bias = 13579#起始序列
ends = 34862#结束序列
cnt = 1
inds = [i+bias for i in range(ends-bias)]
for i in inds:
file_src = path_src + 'image{:08d}.jpg'.format(i)#str(i) + '.jpg'
print(file_src)
file_dst = path_dst + str(cnt) + '.jpg'
if os.path.exists(file_src):#判断文件是否存在,以防中间序列不连续
shutil.copyfile(file_src,file_dst)
cnt = cnt +1
MATLAB 版本:
%移动任意命名的xml和jpg,并按序列重命名
ii = 792;%起始序号
%frames为源数据的个数上限
%源图片路径
% [filename,pathname] = uigetfile('.jpg','请选择一个数据文件');
% pathold = pathname;
f = dir(pathin);
frame = size(f,1);
pathold = 'G:\old\';
%新路径
pathnew = 'G:\new\';
pathnew2 = 'G:\new\';
for i = 1:frame-2
filename_old = f(i+2).name;
if strcmp(filename_old(end-3:end),'.jpg')
filenameold1 = [pathold filename_old(1:end-4) '.xml'];
filenameold = [pathold filename_old];
if exist(filenameold1,'file')
%新的文件名序号
num_strnew = sprintf('%d',ii);
%复制jpg
filenamenew = strcat(pathnew,num_strnew,'.jpg');
copyfile(filenameold,filenamenew);
%复制xml
filenamenew1 = strcat(pathnew2,num_strnew,'.xml');
copyfile(filenameold1,filenamenew1);
ii = ii+1;
end
end
end