Ryflex
Ryflex

Reputation: 5769

Use Python to compare two folders and all of the files inside

I'm wanting to make a little python script to check and compre the contents of two folders and all the files inside.

Could anyone advise on how to do such a feat?

Upvotes: 1

Views: 16603

Answers (2)

Just Me
Just Me

Reputation: 1053

Version 1

import os

folder1 = r'e:\Carte\BB\17 - Site Leadership\Principal 2022\ro'
folder2 = r'e:\Carte\BB\17 - Site Leadership\Principal\ro'

# Funcție pentru a returna lista de fișiere HTML dintr-un folder
def get_html_files(folder):
    html_files = []
    for root, dirs, files in os.walk(folder):
        for file in files:
            if file.lower().endswith('.html'):
                html_files.append(file)
    return html_files

# Obține lista de fișiere HTML pentru fiecare folder
html_files_folder1 = get_html_files(folder1)
html_files_folder2 = get_html_files(folder2)

# Verifică fișierele care se găsesc în folderul 1, dar nu în folderul 2
missing_files = [file for file in html_files_folder1 if file not in html_files_folder2]

# Afișează fișierele și folderul corespunzător în care se găsesc
for file in missing_files:
    if file in html_files_folder1:
        print(f"Fișierul {file} se găsește în folderul {folder1}")
    if file in html_files_folder2:
        print(f"Fișierul {file} se găsește în folderul {folder2}")

Version 2:

import os

folder1 = r'c:\Folder-Oana\extracted'
folder2 = r'c:\Folder-Oana\extracted\translated'

# Funcție pentru a returna lista de fișiere dintr-un folder, ignorând subfolderele
def get_files(folder):
    files = []
    for file in os.listdir(folder):
        file_path = os.path.join(folder, file)
        if os.path.isfile(file_path):
            files.append(file)
    return files

# Obține lista de fișiere pentru fiecare folder
files_folder1 = get_files(folder1)
files_folder2 = get_files(folder2)

# Compara fișierele din folder1 cu cele din folder2
missing_files = []
for file in files_folder1:
    # Verifică dacă fișierul se află în folder1, dar nu în folder2
    if file not in files_folder2:
        # Adaugă fișierul la lista de fișiere lipsă
        missing_files.append(file)

# Afisează fișierele lipsă
if missing_files:
    print("Fișierele care se găsesc în folderul 1, dar nu în folderul 2, sunt:")
    for file in missing_files:
        print(file)
else:
    print("Nu există fișiere lipsă în folderul 2 față de folderul 1.")

Upvotes: 3

amito
amito

Reputation: 445

I believe dircmp from filecmp does most of that for you: https://docs.python.org/2/library/filecmp.html

You can just extend the basic example in this page. By using the attributes left_only, right_only and diff_files you can easily identify missing and not 100% idendical files.

Upvotes: 5

Related Questions