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