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

目录

  • 一、问题描述
  • 二、解决方案:
  • 三、方法解释

一、问题描述

在实验过程中,有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)

其中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里,然后最后打印出差集。

你可能感兴趣的:(解决方案,python,文件处理,差集)