在数据集中含有多种前缀,从前缀为bothFireAndSmoke的jpg图像中,随机且不重复地将10000张图片复制到train文件夹、2000张图片复制到val文件夹、2000张图片复制到test文件夹
时间: 2024-09-06 20:07:35 浏览: 44
要实现从名为"bothFireAndSmoke"的jpg图像中按比例划分并复制到不同文件夹的任务,可以采用Python脚本配合os模块来操作文件。以下是一个基本的方法:
1. **读取图像文件列表**[^1]:
使用`glob`库找到指定前缀的jpg文件:
```python
import os
from glob import.glob
prefix = "bothFireAndSmoke"
img_files = glob(os.path.join('原始文件夹路径', prefix + "*.jpg"))
```
2. **分割数据集**:
创建一个包含三个列表(train, val, test)用于存储各部分的图片路径:
```python
num_train = 10000
num_val = 2000
num_test = 2000
train_files = img_files[:num_train]
val_files = img_files[num_train:num_train+num_val]
test_files = img_files[num_train+num_val:]
assert len(train_files) + len(val_files) + len(test_files) == len(img_files)
```
3. **复制文件**:
使用`shutil`库中的`copy2`函数复制图片到相应的文件夹:
```python
import shutil
target_dirs = {'train': 'train_folder_path', 'val': 'val_folder_path', 'test': 'test_folder_path'}
for dest_dir, files in [('train', train_files), ('val', val_files), ('test', test_files)]:
os.makedirs(dest_dir, exist_ok=True) # 创建目录如果不存在
for file_path in files:
shutil.copy2(file_path, os.path.join(target_dirs[dest_dir], os.path.basename(file_path)))
```
注意事项:
- 在上述代码中,请替换 `'原始文件夹路径'` 和相应的文件夹路径。
- 运行此脚本之前,确保有足够的磁盘空间。
- 如果图片数量不足以精确分配,可能需要调整分割的比例或者添加随机性。
阅读全文