Python超实用脚本工具1-找出两个文件夹中名字相同的文件,并保存输出

针对PASCAL VOC图像数据集中图片与标签不对应问题,使用Python脚本找出对应的图片和标签。

  简单介绍PASCAL VOC数据集:

PASCAL VOC图像数据集是PASCAL Visual Object Classes(VOC) challenge视觉语义分类比赛中使用的数据集。该数据集中的图像共有20个前景对象类别和一个背景对象类别被用作分类、检测和分割任务。语义分割任务是从2007年开始被加入到PASCAL VOC比赛中的,最初用于语义分割的共有632张图像,包括422张训练图像和210张测试图像。该数据集每年比赛时都会进行扩充,截止至2012年,用于语义分割任务的图像已达到4369张。PASCAL VOC是目前最难的语义分割数据集之一,该数据集图像中的内容常会涉及遮挡、不同拍摄视角等情况。


背景

小编在准备跑VOC2007数据集语义分割时,发现JPEGImage文件夹和SegmentationClass文件夹中的图片数量不一致,即原图与对应的标签不相对应,并且原图的格式为.JPG,标签的格式为.PNG,想找出两个文件夹中名称相同(除后缀)的图片,准备写一个脚本来实现,寻到一位大神写的脚本,非常好用,值得分享。


代码实现:

# !/usr/bin/env python
# encoding: utf-8

import os
import glob
from PIL import Image

#指定找到文件后,另存为的文件夹路径
outDir = os.path.abspath('/home/chenxp/datadisk/pascal/VOCdevkit/VOC2010/output') 

#指定第一个文件夹的位置
imageDir1 = os.path.abspath('/home/chenxp/datadisk/pascal/VOCdevkit/VOC2010/JPEGImages')

#定义要处理的第一个文件夹变量
image1 = [] #image1指文件夹里的文件,包括文件后缀格式;
imgname1 = [] #imgname1指里面的文件名称,不包括文件后缀格式

#通过glob.glob来获取第一个文件夹下,所有'.jpg'文件
imageList1 = glob.glob(os.path.join(imageDir1, '*.jpg'))

#遍历所有文件,获取文件名称(包括后缀)
for item in imageList1:
    image1.append(os.path.basename(item))

#遍历文件名称,去除后缀,只保留名称
for item in image1:
    (temp1, temp2) = os.path.splitext(item)
    imgname1.append(temp1)

#对于第二个文件夹路径,做同样的操作
imageDir2 = os.path.abspath('/home/chenxp/datadisk/pascal/VOCdevkit/VOC2010/SegmentationClass')
image2 = []
imgname2 = []
imageList2 = glob.glob(os.path.join(imageDir2, '*.png'))

for item in imageList2:
    image2.append(os.path.basename(item))

for item in image2:
    (temp1, temp2) = os.path.splitext(item)
    imgname2.append(temp1)

#通过遍历,获取第一个文件夹下,文件名称(不包括后缀)与第二个文件夹相同的文件,并另存在outDir文件夹下。文件名称与第一个文件夹里的文件相同,后缀格式亦保持不变。
for item1 in imgname1:
    for item2 in imgname2:
        if item1 == item2:
            dir = imageList1[imgname1.index(item1)]
            img = Image.open(dir)
            name = os.path.basename(dir)
            img.save(os.path.join(outDir, name))

参考:python tools:找出两个文件夹里相同的文件,保存输出_chenxp2311的博客-CSDN博客

  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值