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

try_prompt

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

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!