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
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
FreeFileSync 文版是一个免费的、开源的文件夹比较和同步软件。支持 Windows、Linux、Mac OS X,它也适用于64位操作系统。 程序安装默认可选择一个标准的安装程序或作为一个便携式应用程序。 采用一个干净、简单、直观的界面,以同步为目标,提供了多种功能。 FreeFileSync 是一个易于使用的开放源码文件夹同步工具。FreeFileSync 用于快速简便的配置和行动之间的同步两个文件夹没有限制界面。简单易用。 首先是文件同步功能,可以在指定的两个文件夹之间进行单向或双向的同步,点击程序窗口右上方的绿色齿轮图标可以设置相关参数;期间也可以自定义需要筛选的文件,有“包括”和“例外”两种过滤方式,定义需要过滤的文件类型,这就看个人需要了。 此外就是比较不同文件夹文件是否相同的功能,不过这个功能比较适合同步之前使用,比较的结果会直接显示在列表,方便查看,这样你就可以清楚的知道是否需要进行同步操作了,节省系统资源。 FreeFileSync 文版FreeFileSync 文版 FreeFileSync 特性功能 检测感动和重命名的文件文件夹。 复制锁定的文件(卷影复制服务)。 检测冲突和传播的缺失。 二进制文件比较。 配置处理符号链接。 自动同步作为批处理作业。 处理多个文件夹对。 全面而详细的错误报告。 复制 NTFS 扩展属性。 复制 NTFS 安全权限。 支持长文件路径过 260 个字符。 故障安全文件拷贝。 跨平台: Windows、Linux 和 Mac OS X。 展开如% USERPROFILE %环境变量。 访问变量的驱动器号的卷名( U盘)。 原生64位支持。 保留已删除/更新的文件版本。 通过优化同步序列防止磁盘空间瓶颈。 完整的 Unicode 支持。 高度优化的运行时性能。 包括/通过过滤器排除文件。 FreeFileSync便携式和本地安装可用。 手柄上FAT/FAT32夏令时更改。 使用宏%时间%、 % DATE% 等经常性的备份。 区分大小写同步。 内置锁定:对序列化同一网络共享上运行多个作业。 FreeFileSync 支持多种语言的界面,具有良好的响应时间,并包括用户文档。在整个测试过程,我们没有遇到任何问题; FreeFileSync 没有错误,崩溃或弹出错误对话框。初次使用的用户可能需要一段时间才能习惯这种布局;该界面本来可以更好地组织。
使用说明 : 1、本程序可以作什么? 本程序功能分为两个部分: 一部分是:批量查找指定路径下的文件的内容,是否包含要查询的项目。并把查询出的内容分文件存储。 一部分是:将文本文件导入EXCEL,可以将上一步查找的结果导入,也可以自己选择文件导入(支持多选)。 2、如何使用他? a、批量查找: 首先,在“读入位置”按钮处设置你所要读取的文件的存放位置,此时程序会自动读入此文件夹下所有文件,以供选择;其次,用“>>”或“>”将要读取的文件选入读取队列,当然如果选错了可以用“<<”或“<”删除队列,或者鼠标双击选项删除;再次,点击“+”按钮,添加查找项目到查找项目列表,一次只可以添加一条,如需添加多条则需要重复添加操作;如果添加错误可以双击选项删除或选后点击“-”按钮。最后,点击“开始查找”,程序将会把查找结果输出保存到指定路径下面的output文件夹下面,你可以选择是否打开目录查看。如果需要查询的文件文件头,可以选择“保留文件首行”。 b、EXCEL导入: 首先,选择导入方式,导入方式分为“查询结果导入”和“新选文件导入”两种;当选择“查询结果导入”时,本程序将把“读入位置”处“output”文件夹文件批量导入EXCEL。当选择“新选文件导入”时,本程序在点击“开始导入”时将弹出窗口,您可以自己选择需要导入文件(支持多选),导入EXCEL。其次,设置导入文件时的分割符,默认为“|”,本程序只支持按照分隔符导入。最后,点击“开始导入”按钮开始导入。 3、本程序不判断所查找的文件类型 由于本程序在读入文件时,并没有校验文件的内容和文件类型,因此本程序会读取用户所选择的任意文件,即使此文件是二进制格式的。不论是查询或者是导入功能都是这样。本程序将按行读取所选择的文件(或者有换行符的),在读取完文件后,无论是否找到,都会创建和源文件相同类型的文件,即使是.exe或.rar(一般是打不开的),文件名存储为“output”+原文件名。即使没有找到任何相匹配的内容,本程序也会创建文件,这时后文件大小是0字节,可以按照大小排列看到。 4、请使用“清除文件”按钮及时清除查询结果 程序在查询和创建文件的过程,不会判断是否已经执行过查询操作。如果已经执行过查询操作,“output”文件夹下就会存在查询出的文件,当再次执行查询时,本程序会在已存在的文件后追加查询结果。这样就会出现重复的记录或内容。因此,当需要多次查询时,每次查询前需要点击“清空文件”按钮删除output文件夹,才能保证查找的准确。 5、本程序不会判断运行的环境,因此在运行过程可能会有些未知的错误 本程序在win7环境,vs2012,Netframe4.0下编译通过。本程序支持winxp及以上操作系统。执行EXCEL导入的时候,需要安装Office。Office的版本在2003以上就可以。但是不同我Office版本对导入性能,有一定的影响。Excel2003,最多256列,即2的8次方,最多65536行,即2放入16次方; Excel2007及以上版本,最多16384列,即2的14次方,最多1048576行,即2的20次方。因此如果需要导入的单个文件的行数或者列数,过了所安装Office版本的最多行列数,程序将会报错!
### 回答1: 您可以使用以下几种方法来找出两个文件夹相同文件: 1. 手动比较:通过打开两个文件夹并手动比较文件名称和大小来找出相同文件。 2. 使用文件管理器的比较功能:如果您的文件管理器具有比较两个文件夹的功能,您可以使用它来自动找出相同文件。 3. 使用第三方工具:您可以使用第三方工具,例如 WinMerge,Beyond Compare 等,它们可以帮助您快速比较两个文件夹找出相同文件。 以上是几种找出两个文件夹相同文件的方法,您可以根据自己的需要选择适合的方法。 ### 回答2: 要找出两个文件夹相同文件,我们可以通过以下步骤实现: 1. 首先,打开第一个文件夹,并获取其的所有文件的名称和路径。 2. 同样的,打开第二个文件夹,并获取其的所有文件的名称和路径。 3. 创建一个空列表,用于存储相同文件。 4. 遍历第一个文件夹的所有文件。 5. 对于当前遍历到的文件,在第二个文件夹查找是否存在相同名称和路径的文件。 6. 如果存在相同文件,则将其添加到之前创建的列表。 7. 遍历完第一个文件夹的所有文件后,我们就能得到两个文件夹相同的所有文件。 8. 最后,可以将这些相同文件的名称和路径输出或做进一步处理。 总结来说,要找出两个文件夹相同文件,我们需要获取两个文件夹的所有文件,并对比它们的名称和路径。通过遍历的方式,可以筛选出相同文件,并将它们存储在一个列表。这样就能找到两个文件夹相同文件了。 ### 回答3: 要找出两个文件夹相同文件,可以采取以下步骤: 1. 打开第一个文件夹,获取其的所有文件列表。 2. 打开第二个文件夹,获取其的所有文件列表。 3. 创建一个空的列表,用于存储相同文件名。 4. 遍历第一个文件夹文件列表,对于每个文件,与第二个文件夹文件进行比较。 5. 如果找到相同文件名,则将其添加到空列表。 6. 完成对第一个文件夹的所有文件的比较后,得到了两个文件夹相同文件的列表。 这个方法的原理是通过比较文件名来判断文件是否相同。注意,这种方法只适用于文件名相同就认为是相同文件,不考虑文件内容的差异。 此外,为了提高效率,可以使用哈希值来比较文件内容的相似性。通过计算文件的哈希值,可以快速判断两个文件是否完全相同。如果两个文件的哈希值相同,则它们的内容相同。但是,计算文件的哈希值可能会消耗较长的时间,特别是对于大型文件或大量文件的情况。 总而言之,找出两个文件夹相同文件可以通过比较文件名或比较文件内容来实现。根据具体情况选择适合的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值