如何编写一个Python脚本,从包含图片和对应txt文件的两个不同文件夹中随机选择指定数量(n)的图片及相应的文本文件,然后将它们分别复制到新的两个文件夹中?
时间: 2025-01-01 10:36:46 浏览: 5
要编写一个Python脚本来完成这个任务,你需要使用os、shutil和random模块。以下是一个简化的示例,假设图片文件名和txt文件名都是一一对应的:
```python
import os
import shutil
import random
# 定义源文件夹路径、目标文件夹路径和选择的数量
src_folder_images = 'path/to/source/images'
src_folder_txts = 'path/to/source/txts'
dst_folder_images = 'path/to/destination/images'
dst_folder_txts = 'path/to/destination/txts'
number_to_select = 5 # 指定你要选取的图片和txt文件数量
# 验证文件夹路径是否存在
if not os.path.exists(src_folder_images) or not os.path.exists(src_folder_txts):
print("源文件夹路径不存在,请检查")
else:
# 创建目标文件夹,如果不存在
if not os.path.exists(dst_folder_images):
os.makedirs(dst_folder_images)
if not os.path.exists(dst_folder_txts):
os.makedirs(dst_folder_txts)
# 获取源文件夹中的所有文件和子文件夹
image_files = [f for f in os.listdir(src_folder_images) if os.path.isfile(os.path.join(src_folder_images, f))]
txt_files = [f for f in os.listdir(src_folder_txts) if os.path.isfile(os.path.join(src_folder_txts, f))]
# 验证图片和txt文件是否一一对应
if len(image_files) != len(txt_files):
print("图片和txt文件的数量不匹配,请确保它们一一对应")
else:
# 随机选择指定数量的文件
selected_images = random.sample(image_files, number_to_select)
selected_txts = random.sample(txt_files, number_to_select)
# 复制选中的图片和txt文件到目标文件夹
for img_file, txt_file in zip(selected_images, selected_txts):
src_img_path = os.path.join(src_folder_images, img_file)
src_txt_path = os.path.join(src_folder_txts, txt_file)
dst_img_path = os.path.join(dst_folder_images, img_file)
dst_txt_path = os.path.join(dst_folder_txts, txt_file)
shutil.copy(src_img_path, dst_img_path)
shutil.copy(src_txt_path, dst_txt_path)
print(f"已成功复制了{number_to_select}张图片和对应的文本文件")
```
**相关问题-:**
1. 如何处理非文件夹或不匹配的一对图片和txt文件的情况?
2. 如果源文件夹很大,上述代码对于性能有何影响?
3. 这个脚本能处理嵌套文件夹里的图片和txt文件吗?
4. 如何在脚本中添加错误处理机制,例如文件复制失败时?
阅读全文