slogan3

Creëer een Python Script voor Automatisering van Taken

description

Met deze prompt kan ik snel een Python-script ontwikkelen dat tijdrovende taken automatiseert, waardoor ik productiever word. Het helpt ook om het script beter te structureren en optimaliseren, wat fouten vermindert en onderhoud vergemakkelijkt.

prompt

Help mij een Python-script te maken dat de volgende taken automatiseert: <beschrijf de taken die je wilt aut ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hieronder vind je een voorbeeld Python-script dat automatisch bestanden sorteert op type en hernoemt volgens een patroon. Daarnaast geef ik enkele suggesties voor verbetering van efficiëntie en onderhoudbaarheid. **Voorbeeld Python-script:** ```python import os import shutil # Map waar de bestanden zich bevinden bron_map = 'pad/naar/jouw/map' # Map waar gesorteerde bestanden komen doel_map = 'pad/naar/gesorteerde/map' # Definieer de types en bijbehorende extensies bestands_types = { 'Afbeeldingen': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff'], 'Documenten': ['.pdf', '.docx', '.doc', '.txt', '.xlsx', '.pptx'], 'Audio': ['.mp3', '.wav', '.aac', '.flac'], 'Video': ['.mp4', '.avi', '.mov', '.mkv'], 'Overige': [] } def sorteer_en_hernoem(): # Zorg dat doel mappen bestaan for folder in bestands_types.keys(): os.makedirs(os.path.join(doel_map, folder), exist_ok=True) # Loop door alle bestanden in bron_map for filename in os.listdir(bron_map): bron_pad = os.path.join(bron_map, filename) if os.path.isfile(bron_pad): _, ext = os.path.splitext(filename) ext = ext.lower() # Bepaal type type_gevonden = 'Overige' for folder, extensies in bestands_types.items(): if ext in extensies: type_gevonden = folder break # Bepaal nieuwe naam # Bijvoorbeeld: type_naam_YYYYMMDD_HHMMSS.ext vanuit = os.path.getmtime(bron_pad) import datetime timestamp = datetime.datetime.fromtimestamp(vanuit).strftime('%Y%m%d_%H%M%S') nieuwe_naam = f"{type_gevonden}_{timestamp}{ext}" doel_pad = os.path.join(doel_map, type_gevonden, nieuwe_naam) # Verplaats en hernoem bestand shutil.move(bron_pad, doel_pad) print(f"Verplaatst {filename} naar {doel_pad}") if __name__ == "__main__": sorteer_en_hernoem() ``` --- ### Suggesties voor verbetering: 1. **Configuratie extern maken:** Plaats de paden, extensies en patrooninstellingen in een aparte configuratiebestand (bijvoorbeeld JSON of YAML). Dit verbetert onderhoudbaarheid. 2. **Logging toevoegen:** Gebruik het `logging`-module in plaats van `print()` om een beter overzicht te krijgen en logbestanden te genereren. 3. **Foutafhandeling:** Voeg try-except blokken toe om fouten tijdens het verplaatsen of hernoemen op te vangen en af te handelen. 4. **Batch verwerking en filters:** Voeg opties toe om bepaalde bestanden uit te sluiten of te selecteren. 5. **Gebruik van functies en klassen:** Organiseer de code in functies of klassen voor betere modulariteit en hergebruik. 6. **Recursieve verwerking:** Als je ook submappen wilt verwerken, gebruik dan `os.walk()` in plaats van `os.listdir()`. 7. **Herhaalbaarheid en planning:** Overweeg om het script via een scheduler (zoals cron op Linux of Taakplanner op Windows) automatisch uit te laten voeren. --- Wil je dat ik het script verder uitbreid of aanpas op basis van jouw specifieke situatie?
provider: deepseek
model: deepseek-chat
Absoluut! Hier is een compleet Python-script dat bestanden automatiseert sorteren en hernoemen, gevolgd door belangrijke suggesties voor optimalisatie. ### Python Script: Bestandsorganisator ```python import os import shutil from pathlib import Path from datetime import datetime import logging def setup_logging(): """Configureer logging voor betere traceerbaarheid""" logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', filename='bestandsorganisator.log' ) def maak_map_structuur(basis_map): """Maak de benodigde mappen aan voor verschillende bestandstypes""" mappen = { 'Afbeeldingen': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg'], 'Documenten': ['.pdf', '.docx', '.txt', '.xlsx', '.pptx', '.md'], 'Audio': ['.mp3', '.wav', '.flac', '.aac'], 'Video': ['.mp4', '.avi', '.mov', '.mkv'], 'Archieven': ['.zip', '.rar', '.7z', '.tar'], 'Programmas': ['.exe', '.msi', '.deb', '.dmg'], 'Overige': [] # Voor onbekende bestandstypes } for map_naam in mappen.keys(): map_pad = basis_map / map_naam map_pad.mkdir(exist_ok=True) return mappen def hernoem_bestand(bestand, doel_map, teller): """Hernoem bestand volgens patroon en voorkom naamconflicten""" stam_naam = bestand.stem extensie = bestand.suffix.lower() # Patroon: YYYYMMDD_origineelenaam_volgnummer.extensie datum_prefix = datetime.now().strftime("%Y%m%d") nieuwe_naam = f"{datum_prefix}_{stam_naam}_{teller}{extensie}" doel_pad = doel_map / nieuwe_naam # Voorkom overschrijven: voeg nummer toe indien nodig if doel_pad.exists(): teller += 1 return hernoem_bestand(bestand, doel_map, teller) return doel_pad, teller def organiseer_bestanden(bron_map, basis_doel_map="GesorteerdeBestanden"): """Hoofdfunctie voor het organiseren van bestanden""" setup_logging() bron_path = Path(bron_map) doel_path = Path(basis_doel_map) doel_path.mkdir(exist_ok=True) if not bron_path.exists(): logging.error("Bronmap bestaat niet!") return mappen_structuur = maak_map_structuur(doel_path) type_teller = {map_naam: 1 for map_naam in mappen_structuur.keys()} verwerkte_bestanden = 0 for item in bron_path.iterdir(): if item.is_file(): extensie = item.suffix.lower() doel_map_naam = 'Overige' # Bepaal de juiste map op basis van extensie for map_naam, extensies in mappen_structuur.items(): if extensie in extensies: doel_map_naam = map_naam break doel_map = doel_path / doel_map_naam nieuw_pad, nieuwe_teller = hernoem_bestand( item, doel_map, type_teller[doel_map_naam] ) try: shutil.move(str(item), str(nieuw_pad)) type_teller[doel_map_naam] = nieuwe_teller + 1 verwerkte_bestanden += 1 logging.info(f"Verplaatst: {item.name} -> {nieuw_pad.name}") except Exception as e: logging.error(f"Fout bij verplaatsen {item.name}: {str(e)}") logging.info(f"Organisatie voltooid! {verwerkte_bestanden} bestanden verwerkt.") if __name__ == "__main__": # Gebruik: wijzig het pad naar je gewenste bronmap bron_map = "/pad/naar/je/bestanden" # Pas dit aan! organiseer_bestanden(bron_map) ``` ### Gebruiksaanwijzing: 1. Installeer vereisten: Alleen standaard Python bibliotheken nodig 2. Pas `bron_map` aan naar je gewenste directory 3. Run het script: `python bestandsorganisator.py` --- ### ✅ Suggesties voor Verbetering van Efficiëntie: **1. Multithreading voor grote mappen:** ```python from concurrent.futures import ThreadPoolExecutor def parallel_verwerking(bestanden_lijst): with ThreadPoolExecutor(max_workers=4) as executor: executor.map(verwerk_bestand, bestanden_lijst) ``` **2. Hash-gebaseerde duplicate detectie:** ```python import hashlib def bereken_hash(bestandspad): with open(bestandspad, 'rb') as f: return hashlib.md5(f.read()).hexdigest() ``` **3. Incrementele verwerking:** - Bewaar verwerkte bestanden in een database - Sla reeds verwerkte bestanden over bij volgende runs --- ### ✅ Suggesties voor Onderhoudbaarheid: **1. Configuratiebestand (config.json):** ```json { "bron_map": "/pad/naar/bestanden", "doel_map": "GesorteerdeBestanden", "hernoem_patroon": "YYYYMMDD_naam_nummer", "uitgesloten_extensies": [".tmp", ".temp"] } ``` **2. Foutafhandeling verbeteren:** ```python class BestandsOrganisatorFout(Exception): pass def veilige_verplaatsing(bron, doel): try: shutil.move(bron, doel) except PermissionError: raise BestandsOrganisatorFout("Geen toegangsrechten") ``` **3. Unit tests implementeren:** ```python import unittest class TestBestandsOrganisator(unittest.TestCase): def test_hernoem_patroon(self): resultaat = hernoem_bestand(Path("test.txt"), Path("/tmp"), 1) self.assertIn("2024", str(resultaat[0])) ``` **4. Type hints toevoegen:** ```python from typing import Dict, List, Tuple def hernoem_bestand(bestand: Path, doel_map: Path, teller: int) -> Tuple[Path, int]: # functie implementatie ``` **5. Logging niveaus differentiëren:** ```python logging.debug("Debug informatie") logging.warning("Waarschuwing: bijna geen ruimte") ``` --- ### 🚀 Extra Optimalisaties: 1. **Watchdog integratie** voor automatische organisatie bij nieuwe bestanden 2. **GUI interface** voor niet-technische gebruikers 3. **Cloud integratie** (Google Drive, Dropbox) 4. **Geavanceerde hernoemregels** met regex-patronen 5. **Undo-functionaliteit** voor veilig gebruik Dit script biedt een robuuste basis die eenvoudig uit te breiden is voor specifieke gebruiksscenario's!