python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python比较文件夹

Python实现轻松比较两个文件夹的多种方法

作者:Jack电子实验室

在处理数据集时,我们经常会遇到两个文件夹中文件数目不一致的情况,本文我们就来使用Python比较一下两个文件夹,轻松实现找出多出的文件,有需要的可以了解下

在处理数据集时,我们经常会遇到两个文件夹中文件数目不一致的情况。这可能是由于某些文件被遗漏或者错误地删除导致的。为了快速找出哪些文件是多出来的,我们可以使用Python中的集合操作来实现。

首先,我们定义一个函数 get_files_in_directory(directory) 来获取指定目录中的所有文件名,并将其转换为一个集合:

import os

def get_files_in_directory(directory):
    """获取指定目录中的所有文件名"""
    return set(os.listdir(directory))

接下来,我们定义另一个函数 find_extra_files(dir1, dir2) 来比较两个文件夹中的文件差异:

def find_extra_files(dir1, dir2):
    """找出在 dir1 中但不在 dir2 中的文件"""
    files_dir1 = get_files_in_directory(dir1)
    files_dir2 = get_files_in_directory(dir2)

    extra_in_dir1 = files_dir1 - files_dir2
    extra_in_dir2 = files_dir2 - files_dir1

    return extra_in_dir1, extra_in_dir2

在这个函数中,我们首先使用 get_files_in_directory() 函数获取两个文件夹中的所有文件名,并将其转换为集合。然后,我们使用集合的差集操作 files_dir1 - files_dir2files_dir2 - files_dir1 来分别找出在 dir1 中多出的文件和在 dir2 中多出的文件。

最后,我们可以使用这个函数来比较两个文件夹,并输出结果:

# 示例用法
dir1 = r'F:\datesate\datasetnii\date-png\tumor_image'  
dir2 = r'F:\datesate\datasetnii\date-png\tumor_lable'  

extra_in_dir1, extra_in_dir2 = find_extra_files(dir1, dir2)

print(f"在 {dir1} 中多出的文件: {extra_in_dir1}")
print(f"在 {dir2} 中多出的文件: {extra_in_dir2}")

这样,我们就可以快速地找出两个文件夹中多出的文件,并进行相应的处理。

全部代码:

import os

def get_files_in_directory(directory):
    """获取指定目录中的所有文件名"""
    return set(os.listdir(directory))

def find_extra_files(dir1, dir2):
    """找出在 dir1 中但不在 dir2 中的文件"""
    files_dir1 = get_files_in_directory(dir1)
    files_dir2 = get_files_in_directory(dir2)

    extra_in_dir1 = files_dir1 - files_dir2
    extra_in_dir2 = files_dir2 - files_dir1

    return extra_in_dir1, extra_in_dir2

# 示例用法
dir1 = r'F:\datesate\datasetnii\date-png\tumor_image'  # 替换为第一个文件夹的路径
dir2 = r'F:\datesate\datasetnii\date-png\tumor_lable'  # 替换为第二个文件夹的路径

extra_in_dir1, extra_in_dir2 = find_extra_files(dir1, dir2)

print(f"在 {dir1} 中多出的文件: {extra_in_dir1}")
print(f"在 {dir2} 中多出的文件: {extra_in_dir2}")

方法补充

python比较两个文件是否一致

1.逐行比较

逐行比较是最简单的文件比较方法,适用于小文件。可以通过逐行读取两个文件的内容,并逐行进行比较。以下是一个简单的示例代码:

def compare_files_line_by_line(file1, file2):
    with open(file1, 'r') as f1, open(file2, 'r') as f2:
        for line1, line2 in zip(f1, f2):
            if line1 != line2:
                return False
            return True

这种方法的优点是直观、易于理解,但缺点是对于大文件效率较低。

2.文件内容哈希

文件内容哈希是一种更高效的比较方法,特别适用于大文件。通过计算文件内容的哈希值,可以快速判断两个文件是否一致。以下是一个示例代码:

import hashlib
def get_file_hash(file_path):
    hash_md5 = hashlib.md5()
    with open(file_path, 'rb') as f:
        for chunk in iter(lambda: f.read(4096), b""):
            hash_md5.update(chunk)
    return hash_md5.hexdigest()
def compare_files_by_hash(file1, file2):
    return get_file_hash(file1) == get_file_hash(file2)

3.文件大小比较

文件大小比较是一种简单而快速的比较方法。对于某些情况下,如果两个文件的大小不同,那么它们的内容肯定不一致。以下是一个示例代码:

import os
def compare_files_by_size(file1, file2):
    return os.path.getsize(file1) == os.path.getsize(file2)

4.使用第三方库

使用filecmp库

filecmp库是Python标准库中的一个模块,可以方便地比较文件和目录。以下是一个示例代码:

import filecmp
def compare_files_with_filecmp(file1, file2):
​​​​​​​return filecmp.cmp(file1, file2, shallow=False)

这种方法的优点是使用方便,缺点是需要依赖第三方库。

使用difflib库

difflib库也是Python标准库中的一个模块,可以用于比较文件内容,并生成差异报告。以下是一个示例代码:

import difflib

def compare_files_with_difflib(file1, file2):
    with open(file1, 'r') as f1, open(file2, 'r') as f2:
        diff = difflib.unified_diff(f1.readlines(), f2.readlines())
        
        return list(diff)

这种方法的优点是可以生成详细的差异报告,缺点是需要依赖第三方库,并且对于大文件效率较低。

到此这篇关于Python实现轻松比较两个文件夹的多种方法的文章就介绍到这了,更多相关Python比较文件夹内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文