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
...
tags
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!

