Bestanden in twee verschillende folders met elkaar vergelijken met behulp van Python en de niet-overlappende bestanden in een nieuwe folder opslaan

Een week geleden schetste ik een voorbeeld van twee folders waarvan de inhoud enige overlap heeft. De bestanden die in folderA voorkomen, maar NIET in folderB, werden in dat voorbeeld geïdentificeerd. Maar dit kan beter …!

In het Python script wat via de onderstaande link te vinden is, wordt wederom gekeken naar de niet-overlappende bestanden. Met andere woorden, welke bestanden die aanwezig zijn in folderA, missen in folderB. Het verschil met het vorige script, is dat de bestanden niet alleen geïdentificeerd worden, maar ook meteen naar een derde folder (folderC), verplaatst worden.

Zo kun je kijken welke bestanden het betreft en of je deze bestanden wilt behouden.

Veel succes met het opschonen van je opslag!

# V2
# Programma dat de bestanden (en niet de subfolders) in twee verschillende folders met elkaar vergelijkt en de ontbrekende bestanden in een nieuwe folder opslaat
import os
import shutil

# Paths definiëren
PathFotoHardeschijf = 'c:\\Alles\\Foto\'s'
PathFotoOnedrive = 'c:\\Users\\user1\\OneDrive\\Alles\\Foto\'s'
PathOntbrekendeFotos = 'c:\\Users\\user1\\OneDrive\\Alles\\Foto\'s2'

# Lijst met alle items in de folders van de bovenstaande paths
FotoHardeschijf = os.listdir(PathFotoHardeschijf)   # 9 items
FotoOnedrive = os.listdir(PathFotoOnedrive)         # 8 items

# Bepalen welke lijst het meeste items heeft om te zien welke als eerste te gebruiken in de loop
print(f'Aantal items in variabele FotoHardeschijf: {str(len(FotoHardeschijf))}\nAantal items in variabele FotoOnedrive: {str(len(FotoOnedrive))}\n')

# Als het een bestand betreft en geen map, en het bestand niet voorkomt in variabele FotoOnedrive, zet hem dan in de lijst in variabele Ontbrekend
for bestand in FotoHardeschijf:
    if not os.path.isfile(os.path.abspath(os.path.join(PathFotoHardeschijf, bestand))): # Is dit geen bestand?
        continue                                                                        # Gan dan meteen door naar het begin van de loop zonder verder te gaan naar het code-block hieronder. Oftewel, sla folders over.
    # Komt bestand niet voor in FotoOnedrive?
    if bestand not in FotoOnedrive:
        for Foldername, Subfoldernames, Filenames in os.walk(PathFotoHardeschijf): # os.walk() functie nodig om daadwerkelijke absolute pad te verkrijgen. os.path.abspath() functie gaat uit van cwd dus niet voldoende in dit geval. 
            # Komt het bestand voor in de map? (Noodzakelijk aangezien je de variabele "bestand" aan variabele "Foldername" plakt. Het kan om die reden zijn je een combinatie maakt die niet bestaat. 
            if bestand in Filenames: 
                shutil.copy(os.path.join(Foldername, bestand), PathOntbrekendeFotos)
                print(f'{os.path.join(Foldername, bestand)} gekopieerd naar {PathOntbrekendeFotos}')

Leave Comment

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *