• 解决方案:读取两个文件夹里不同名的文件,处理映射不对应的文件


    一、问题描述

    在实验过程中,有a、b两个文件夹,每个文件夹里有上万个文件,文件类型不相同,但是文件名是对应的,比如a文件夹里有1.jpg、2.jpg、3.jpg,对应的b文件夹里有1.txt、2.txt、3.txt。

    而遇见的问题是,在两个文件夹中,部分文件对应不到同名文件,比如a文件夹里有10502.jpg但是b文件夹里并没有10502.txt,b文件夹里有10522.txt而a文件夹里没有10522.jpg。

    那么需要解决的问题就是,如何找到这些不对应的文件,找到差集,即找到在a中但不在b中的元素,在b中但不在a中的元素,最后将其打印出来。

    文件数量少的时候可以用命令行或者简单的文件批处理进行操作,但是当文件数量上万级别时,会出现效率缓慢的问题。这里使用的是python的一些文件操作方法进行解决。

    二、解决方案:

    # -*- coding: utf-8 -*-
    import os
    
    path1 = r'./images'
    path2 = r'./text'
    
    def read_all_file_name():
        file_path = './text'
        file_name = os.listdir(file_path)
        return file_name
    
    def file_name(image_dir, text_dir):
        jpg_list = []
        txt_list = []
        jpg_list = os.listdir(image_dir)
        text_list = os.listdir(text_dir)
        print(len(jpg_list))
        print(len(text_list))
        for i in range(len(jpg_list)):
            jpg_list[i] = jpg_list[i].split(".")[0]
        for i in range(len(text_list)):
            text_list[i] = text_list[i].split(".")[0]
    
        diff = set(text_list).difference(set(jpg_list))  # 差集,在a中但不在b中的元素
        for name in diff:
            print("no jpg", name + ".text")
        diff2 = set(jpg_list).difference(set(text_list))  # 差集,在b中但不在a中的元素
        print(len(diff2))
        for name in diff2:
            print("no txt", name + ".jpg")
    
    
    if __name__ == '__main__':
        # file_names = read_all_file_name()
        # print(file_names)
        file_name(path1, path2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    其中path1是images文件夹,path2是text文件夹。

    三、方法解释

    read_all_file_name函数在其中没有起到作用,只是写在这里备用的,他的功能是可以读取到文件夹的目录,然后通过listdir创建list打印目录中的所有文件列表。

    file_name函数是本方法的主要函数,参数是两个文件夹的地址名,在本代码里是path1 = r’./images’、path2 = r’./text’,r表示只读。

    在file_name函数里,首先我们把两个文件夹的文件名读取成list,成为jpg_list和text_list,但是每个文件夹的后缀名不同,不能计算差集,故我们使用split(“.”)[0]进行分割,然后得到前面的纯文件名。最后我们使用diff = set(text_list).difference(set(jpg_list)),将差集存在diff里,然后最后打印出差集。

  • 相关阅读:
    英文参考文献中,p 和 pp分别表示什么,该如何去使用?
    vivo数据中心网络链路质量监测的探索实践
    springboot+高校教室排课系统 毕业设计-附源码221556
    【单链表,循环链表和双向链表的时间效率比较,顺序表和链表的比较,有序表的合并------用顺序表实现,用链表实现】
    AD18原理图转Candence SPB17.4
    汽车电子专栏目录一览
    c语言:通讯录管理系统(动态分配内存版)
    go-cron源码分析(一、由初始化引起的一些其他事)
    模型推理后处理C++代码优化案例
    【云原生】kubernetes中pod(进阶)
  • 原文地址:https://blog.csdn.net/air__Heaven/article/details/125909577