>我有一个图像数据集,如下所示:
数据集每个图像的时间步长是 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
解释代码:files
取dataset_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
为您拥有的每个文件获得所需的结果
- 获取保存时间戳的子字符串
- 使用
datetime.datetime.strptime
将其解析为datetime.datetime
实例 - 使用
.timestamp
方法将所述实例转换为自纪元以来的秒
数 - 计算秒数整数除法 (
//
)10800
(3 小时内的秒数) - 转换您进入
str
的值并将其用作目标子文件夹名称