我的目录有数百个图片和文本文件(.png
和.txt
)。
它们的特殊之处在于每个图像都有自己的匹配txt文件,例如im1.png
有img1.txt
,news_im2.png
有news_im2.png
等。
我想要的是给它一个参数或百分比的某种方式,让我们说40,它将40%的图像连同其对应的文本随机复制到一个新文件中,这里最重要的一个词是randomely,好像我做了测试再次,我不应该得到相同的结果。
理想情况下,我应该能够采取2种参数(提醒第一个将是每个样本的%)第二个是样本数量,例如我可能想要我的数据在3个不同的样本中随机不仅2,在这种情况下它应该能够使目标目录路径等于我想要的样本数量并相应地传播它们,例如我不应该在2个不同的样本中找到img_1。
到目前为止,我所做的只是设置我的方法来复制它们,因为在这个例子中我找不到任何随机方式来执行我的任务,它只会复制图像:
import glob, os, shutil
source_dir ='all_the_content/'
dest_dir = 'percentage_only/'
files = glob.iglob(os.path.join(source_dir, "*.png"))
for file in files:
if os.path.isfile(file):
shutil.copy2(file, dest_dir)
答案 0 :(得分:0)
尽管您处理文件的情况,实际上您的要求是关于采样,因此最好不要重建轮子,sklearn的train_test_split提供了一些处理采样的方法,希望它可以帮助您。通过参数test_size,您可以决定使用多少样本。
答案 1 :(得分:0)
#Idea is to link images and txt files then have them mapped to numbers so
that you can have random sampling on numbers and then use it for image
sampling
# You can read all the filenames to a dict,
# Using os.lisdir() you can read and filter files
imgs_dict = {'img1.png' : 'img1.txt'}
#and then create a list with keys
imgs_list = imgs_dict.keys()
# Now use random
import random
img_sample_indxs = random.sample(range(1, 100), 40)
然后继续复制