需求:需要将数据库中,实验需要的一部分图像数据原样复制到另一个文件夹,方便上传到服务器做些小实验。
已知: 数据集的存在路径、 实验所需图像的子路径名以及文件名(这个存储为CSV文件了,在我之前的博客中写过怎样按需求划分并保存)
任务:将数据集的存在路径改为自己给定的路径,同时要分隔出图像子路径,若不存在,则需要重新创建。
数据集存在路径Mar这个:
同时总路径下,里面又分成这个样子,这就是子路径名,子路径名下就直接是图像的文件名了:
同时,CSV文件中是这么存储的。
等分析完,这个事就好办了。
shutil库
这里,我原本的想法一直是用PIL.Image, CV库等读入图像,然后再高分辨率写入指定文件夹,不过这样子很麻烦,而且写入的图像会有失真,跟原图像不一样大了哎,直到后来想起了shutil库,恩,思想之前走了弯路,这么方便的复制粘贴竟然忘记。。
使用方法就不写了,具体想用的功能自行查看:Python shutil模块
代码:
import shutil
import csv, os, cv2
#这里循环10次读CSV文件,是因为之前分了10个CSV分别存储的,若需求只有一个,就不用循环了
for j in range(1,11):
sf = r"D:\40000\arousal/file" + str(j) + ".csv"
files = csv.DictReader(open(sf, "r"))
for file in files:
name = file['img']
label = file['arousal']
local_img_name = r"D:/affectnet\Manually_Annotated_Images" #数据集路径名
target_path = r"F:\Affectnet-dataset\40000" #目标路径名
sourceFile = os.path.join(local_img_name, name)
targetFile = os.path.join(target_path, name)
#将图像前面的文件路径截取出来,如果路径不存在,则创建路径!
#这样就可以完美解决文件复制问题了
path = targetFile.split('/')[0] #目的是在目标路径名之后加上 子路径名
if not os.path.exists(path):
os.makedirs(path)
shutil.copy(sourceFile, path)