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


    一、问题描述

    在实验过程中,有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里,然后最后打印出差集。

  • 相关阅读:
    request和response——请求响应对象
    【Spark NLP】第 15 章:聊天机器人
    K8S安装过程五:制作与生成证书
    2. MongoDB 应用与开发-安装
    本地生活服务平台哪家强,怎么申请成为服务商?
    Java 24 Design Pattern 之 建造者模式
    gRPC 常问问题
    CDN+COS搭建图床超详细步骤
    大数据企业申报!2022年度武汉市大数据企业认定条件、流程和材料汇编
    性能分析5部曲:瓶颈分析与问题定位,如何快速解决瓶颈?
  • 原文地址:https://blog.csdn.net/air__Heaven/article/details/125909577