{"id":398,"date":"2024-05-17T06:25:31","date_gmt":"2024-05-17T06:25:31","guid":{"rendered":"https:\/\/datadandies.nl\/?p=398"},"modified":"2024-05-17T06:26:15","modified_gmt":"2024-05-17T06:26:15","slug":"bestanden-in-twee-verschillende-folders-met-elkaar-vergelijken-met-behulp-van-python-en-de-niet-overlappende-bestanden-in-een-nieuwe-folder-opslaan","status":"publish","type":"post","link":"https:\/\/datadandies.nl\/index.php\/2024\/05\/17\/bestanden-in-twee-verschillende-folders-met-elkaar-vergelijken-met-behulp-van-python-en-de-niet-overlappende-bestanden-in-een-nieuwe-folder-opslaan\/","title":{"rendered":"Bestanden in twee verschillende folders met elkaar vergelijken met behulp van Python en de niet-overlappende bestanden in een nieuwe folder opslaan"},"content":{"rendered":"\n<p>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\u00efdentificeerd. Maar dit kan beter &#8230;!<\/p>\n\n\n\n<p>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\u00efdentificeerd worden, maar ook meteen naar een derde folder (folderC), verplaatst worden.<\/p>\n\n\n\n<p>Zo kun je kijken welke bestanden het betreft en of je deze bestanden wilt behouden.<\/p>\n\n\n\n<p>Veel succes met het opschonen van je opslag!<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# V2\n# Programma dat de bestanden (en niet de subfolders) in twee verschillende folders met elkaar vergelijkt en de ontbrekende bestanden in een nieuwe folder opslaat\nimport os\nimport shutil\n\n# Paths defini\u00ebren\nPathFotoHardeschijf = 'c:\\\\Alles\\\\Foto\\'s'\nPathFotoOnedrive = 'c:\\\\Users\\\\user1\\\\OneDrive\\\\Alles\\\\Foto\\'s'\nPathOntbrekendeFotos = 'c:\\\\Users\\\\user1\\\\OneDrive\\\\Alles\\\\Foto\\'s2'\n\n# Lijst met alle items in de folders van de bovenstaande paths\nFotoHardeschijf = os.listdir(PathFotoHardeschijf)   # 9 items\nFotoOnedrive = os.listdir(PathFotoOnedrive)         # 8 items\n\n# Bepalen welke lijst het meeste items heeft om te zien welke als eerste te gebruiken in de loop\nprint(f'Aantal items in variabele FotoHardeschijf: {str(len(FotoHardeschijf))}\\nAantal items in variabele FotoOnedrive: {str(len(FotoOnedrive))}\\n')\n\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\nfor bestand in FotoHardeschijf:\n    if not os.path.isfile(os.path.abspath(os.path.join(PathFotoHardeschijf, bestand))): # Is dit geen bestand?\n        continue                                                                        # Gan dan meteen door naar het begin van de loop zonder verder te gaan naar het code-block hieronder. Oftewel, sla folders over.\n    # Komt bestand niet voor in FotoOnedrive?\n    if bestand not in FotoOnedrive:\n        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. \n            # Komt het bestand voor in de map? (Noodzakelijk aangezien je de variabele &quot;bestand&quot; aan variabele &quot;Foldername&quot; plakt. Het kan om die reden zijn je een combinatie maakt die niet bestaat. \n            if bestand in Filenames: \n                shutil.copy(os.path.join(Foldername, bestand), PathOntbrekendeFotos)\n                print(f'{os.path.join(Foldername, bestand)} gekopieerd naar {PathOntbrekendeFotos}')\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Kopieer\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\"># V2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Programma dat de bestanden (en niet de subfolders) in twee verschillende folders met elkaar vergelijkt en de ontbrekende bestanden in een nieuwe folder opslaat<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> os<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> shutil<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Paths defini\u00ebren<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">PathFotoHardeschijf <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">c:<\/span><span style=\"color: #EBCB8B\">\\\\<\/span><span style=\"color: #A3BE8C\">Alles<\/span><span style=\"color: #EBCB8B\">\\\\<\/span><span style=\"color: #A3BE8C\">Foto<\/span><span style=\"color: #EBCB8B\">\\&#39;<\/span><span style=\"color: #A3BE8C\">s<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">PathFotoOnedrive <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">c:<\/span><span style=\"color: #EBCB8B\">\\\\<\/span><span style=\"color: #A3BE8C\">Users<\/span><span style=\"color: #EBCB8B\">\\\\<\/span><span style=\"color: #A3BE8C\">user1<\/span><span style=\"color: #EBCB8B\">\\\\<\/span><span style=\"color: #A3BE8C\">OneDrive<\/span><span style=\"color: #EBCB8B\">\\\\<\/span><span style=\"color: #A3BE8C\">Alles<\/span><span style=\"color: #EBCB8B\">\\\\<\/span><span style=\"color: #A3BE8C\">Foto<\/span><span style=\"color: #EBCB8B\">\\&#39;<\/span><span style=\"color: #A3BE8C\">s<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">PathOntbrekendeFotos <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">c:<\/span><span style=\"color: #EBCB8B\">\\\\<\/span><span style=\"color: #A3BE8C\">Users<\/span><span style=\"color: #EBCB8B\">\\\\<\/span><span style=\"color: #A3BE8C\">user1<\/span><span style=\"color: #EBCB8B\">\\\\<\/span><span style=\"color: #A3BE8C\">OneDrive<\/span><span style=\"color: #EBCB8B\">\\\\<\/span><span style=\"color: #A3BE8C\">Alles<\/span><span style=\"color: #EBCB8B\">\\\\<\/span><span style=\"color: #A3BE8C\">Foto<\/span><span style=\"color: #EBCB8B\">\\&#39;<\/span><span style=\"color: #A3BE8C\">s2<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Lijst met alle items in de folders van de bovenstaande paths<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">FotoHardeschijf <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> os<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">listdir<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">PathFotoHardeschijf<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #616E88\"># 9 items<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">FotoOnedrive <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> os<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">listdir<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">PathFotoOnedrive<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\">         <\/span><span style=\"color: #616E88\"># 8 items<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Bepalen welke lijst het meeste items heeft om te zien welke als eerste te gebruiken in de loop<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">f<\/span><span style=\"color: #A3BE8C\">&#39;Aantal items in variabele FotoHardeschijf: <\/span><span style=\"color: #EBCB8B\">{<\/span><span style=\"color: #88C0D0\">str<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">len<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">FotoHardeschijf<\/span><span style=\"color: #ECEFF4\">))<\/span><span style=\"color: #EBCB8B\">}\\n<\/span><span style=\"color: #A3BE8C\">Aantal items in variabele FotoOnedrive: <\/span><span style=\"color: #EBCB8B\">{<\/span><span style=\"color: #88C0D0\">str<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">len<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">FotoOnedrive<\/span><span style=\"color: #ECEFF4\">))<\/span><span style=\"color: #EBCB8B\">}\\n<\/span><span style=\"color: #A3BE8C\">&#39;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># 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<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> bestand <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> FotoHardeschijf<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">not<\/span><span style=\"color: #D8DEE9FF\"> os<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">path<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">isfile<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">os<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">path<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">abspath<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">os<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">path<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">join<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">PathFotoHardeschijf<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> bestand<\/span><span style=\"color: #ECEFF4\">))):<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\"># Is dit geen bestand?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">continue<\/span><span style=\"color: #D8DEE9FF\">                                                                        <\/span><span style=\"color: #616E88\"># Gan dan meteen door naar het begin van de loop zonder verder te gaan naar het code-block hieronder. Oftewel, sla folders over.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\"># Komt bestand niet voor in FotoOnedrive?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> bestand <\/span><span style=\"color: #81A1C1\">not<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> FotoOnedrive<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> Foldername<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> Subfoldernames<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> Filenames <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> os<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">walk<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">PathFotoHardeschijf<\/span><span style=\"color: #ECEFF4\">):<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\"># os.walk() functie nodig om daadwerkelijke absolute pad te verkrijgen. os.path.abspath() functie gaat uit van cwd dus niet voldoende in dit geval. <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #616E88\"># Komt het bestand voor in de map? (Noodzakelijk aangezien je de variabele &quot;bestand&quot; aan variabele &quot;Foldername&quot; plakt. Het kan om die reden zijn je een combinatie maakt die niet bestaat. <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> bestand <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> Filenames<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                shutil<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">copy<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">os<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">path<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">join<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Foldername<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> bestand<\/span><span style=\"color: #ECEFF4\">),<\/span><span style=\"color: #D8DEE9FF\"> PathOntbrekendeFotos<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">f<\/span><span style=\"color: #A3BE8C\">&#39;<\/span><span style=\"color: #EBCB8B\">{<\/span><span style=\"color: #D8DEE9FF\">os<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">path<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">join<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Foldername<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> bestand<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #EBCB8B\">}<\/span><span style=\"color: #A3BE8C\"> gekopieerd naar <\/span><span style=\"color: #EBCB8B\">{<\/span><span style=\"color: #D8DEE9FF\">PathOntbrekendeFotos<\/span><span style=\"color: #EBCB8B\">}<\/span><span style=\"color: #A3BE8C\">&#39;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span><\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>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\u00efdentificeerd. Maar dit kan beter &#8230;! In het Python script wat via de onderstaande link te vinden is, wordt wederom gekeken naar de niet-overlappende bestanden.&hellip;<\/p>\n<p class=\"more-link\"><a href=\"https:\/\/datadandies.nl\/index.php\/2024\/05\/17\/bestanden-in-twee-verschillende-folders-met-elkaar-vergelijken-met-behulp-van-python-en-de-niet-overlappende-bestanden-in-een-nieuwe-folder-opslaan\/\" class=\"themebutton\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":400,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[37],"class_list":["post-398","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-python"],"_links":{"self":[{"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/posts\/398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/comments?post=398"}],"version-history":[{"count":1,"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/posts\/398\/revisions"}],"predecessor-version":[{"id":399,"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/posts\/398\/revisions\/399"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/media\/400"}],"wp:attachment":[{"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/media?parent=398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/categories?post=398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/tags?post=398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}