如何使用python将大型图像数据集划分为图片组并将它们保存在子文件夹中?



>我有一个图像数据集,如下所示:

数据集每个图像的时间步长是 15 分钟(如您所见,时间戳在文件名中)。

现在我想将这些图像分组为 3 小时长的序列,并将这些序列保存在分别包含 12 张图像(=3 小时)的子文件夹中。 理想情况下,结果如下所示: 序列

我尝试在保存图像数据集的文件夹中使用os.walk和循环,然后我使用 pandas 创建了一个数据帧,因为我认为我可以更轻松地处理文件,但我认为我在这里完全偏离了目标。

既然你说你只需要 12 个文件(考虑到所有文件的时间戳都是一样的,12 是你需要的确切数字,下面的代码可以帮助你

import os
import shutil
output_location = "location where you want to save them" # better not to be in the same location with the dataset
dataset_path = "your data set"
files = [os.path.join(path, file) for path, subdirs, files in os.walk(dataset_path) for file in files]
nr_of_files = 0
folder_name = ""
for index in range(len(files)):
if nr_of_files == 0:
folder_name = os.path.join(output_location, files[index].split("\")[-1].split(".")[0])
os.mkdir(folder_name)
shutil.copy(files[index], files[index].replace(dataset_path, folder_name))
nr_of_files += 1
elif nr_of_files == 11:
shutil.copy(files[index], files[index].replace(dataset_path, folder_name))
nr_of_files = 0
else:
shutil.copy(files[index], files[index].replace(dataset_path, folder_name))
nr_of_files += 1

解释代码:
filesdataset_path中所有文件的值。设置此变量,files将包含所有文件的整个路径。

for循环互通整个files长度。

用于nr_of_files计算每 12 个文件。如果为 0,它将创建一个名为files[index]的文件夹到您设置为输出的位置,将复制文件(将输入路径替换为输出路径)

如果是 11(从 0 开始,索引 == 11 表示第 12 个文件)将复制文件并将nr_of_files设置回 0 以创建另一个文件夹

最后else将简单地复制文件并递增nr_of_files

每张图像的时间步长是 15 分钟(如您所见, 时间戳在文件名中)。

现在我想将这些图像分组为 3 小时长序列并保存 子文件夹中分别包含 12 的序列 图像(=3小时)

我建议利用内置库datetime为您拥有的每个文件获得所需的结果

  1. 获取保存时间戳的子字符串
  2. 使用datetime.datetime.strptime将其解析为datetime.datetime实例
  3. 使用.timestamp方法将所述实例转换为自纪元以来的秒
  4. 计算秒数整数除法 (//)10800(3 小时内的秒数)
  5. 转换您进入str的值并将其用作目标子文件夹名称

最新更新