该文只是记录下学习读取大样本图片,随机选取其中的样本图片复制到指定路径下。可以跳过第二步。
目录
读取路径下的所有图片并将文件名保存到txt文件当中
在上述txt文件下随机选取一定图片保存到另一txt当中
将随机选取的图片复制到另一指定文件下
import os
import argparse
import numpy as np
parser = argparse.ArgumentParser()
parser.add_argument('--path', type=str,default="path1", help='path to the dataset')
parser.add_argument('--output', type=str,default="path2/b.flist", help='path to the file list')
args = parser.parse_args()
ext = {'.JPG', '.JPEG', '.PNG', '.TIF', 'TIFF'}
images = []
for root, dirs, files in os.walk(args.path):
print('loading ' + root)
for file in files:
if os.path.splitext(file)[1].upper() in ext:
images.append(os.path.join(root, file))
images = sorted(images)
np.savetxt(args.output, images, fmt='%s')
import random
import os
import numpy as np
import glob
#加载txt文件
def load_flist(flist):
if isinstance(flist, list):
return flist
# flist: image file path, image directory path, text file flist path
if isinstance(flist, str):
if os.path.isdir(flist):
flist = list(glob.glob(flist + '/*.jpg')) + list(glob.glob(flist + '/*.png'))
flist.sort()
return flist
if os.path.isfile(flist):
try:
return np.genfromtxt(flist, dtype=np.str, encoding='utf-8')
except:
return [flist]
os.path.isfile('path3/a.flist'))
#返回列表
return []
#写入文件名
def log(file,path):
with open(path, 'a') as f:
f.write('%s\n' % file)
k=[]
for i in range(20):
yangben = random.randint(0, 100)
k.append(yangben)
#上一步保存的txt文件
path='path2/b.flist'
for j in range(20):
yang=load_flist(path)
indx=k[j]
log(yang[indx],'path4\yangben.flist') #path4\yangben.flist为随机选取后的txt文件
import shutil
# 源文件夹和目标文件夹路径
#path6要复制的源文件目录
folder_A = "path6"
#path7目标目录
folder_B = "path7"
# 读取包含文件名的txt文件
txt_file = "path4\yangben.flist"
with open(txt_file, "r") as file:
for line in file:
# 获取文件名并去除换行符
filename = line.strip('\n')
# 复制文件
shutil.copy(filename, folder_B)
print("文件复制完成")