Project B - Hernoem bestanden automatisch
01 - Projectoverzicht
- In dit project maak je een Python-script dat meerdere bestanden automatisch een nette naam geeft.
- Het script lost het probleem op van bestanden met namen zoals
IMG_1234.jpg,scan final nieuw.pdfofdocument (1).docx. - Je gebruikt een testmap met kopieën van bestanden, zodat je veilig kunt oefenen zonder originele bestanden kwijt te raken.
- Het script maakt nieuwe bestandsnamen met vaste onderdelen zoals datum, volgnummer, categorie en oorspronkelijke extensie.
- Het resultaat is een map waarin alle bestanden consequent en herkenbaar zijn hernoemd.
- Je gebruikt AI om Python-code te laten maken die eerst een voorbeeld toont voordat bestanden echt worden aangepast.
- Je voert de code uit in VS Code en controleert de uitvoer in de terminal.
- Als de namen niet goed genoeg zijn, verbeter je de prompt met extra regels voor spaties, hoofdletters, accenten en volgnummers.
02 - Projectmap en Python-omgeving
Voorkennis: doorloop de voorgaande projecten. Het doel en gebruik van .venv zijn uitgelegd in project A, blok 02. Voor ieder nieuw project maak je een eigen omgeving; hieronder herhaal je die bekende stappen.
- Maak een eigen projectmap
project_ben open die map in VS Code. Maak daarin strakshernoemen.py. - Deze oefeningen voer je lokaal uit in de terminal van VS Code, omdat ze bestanden op je computer lezen of schrijven. Gebruik hiervoor de Python-installatie uit de basiscursus.
- Controleer je Python-versie. Werkt
pythonop macOS of Linux niet, gebruik danpython3voor het aanmaken van de omgeving.
python --version
python -m venv .venv
Activeer de omgeving. In Windows PowerShell:
.venv\Scripts\Activate.ps1
In de Windows-opdrachtprompt (cmd):
.venv\Scripts\activate.bat
Op macOS of Linux:
source .venv/bin/activate
Kies in VS Code via Python: Select Interpreter de interpreter uit .venv. Gebruik vanaf nu de geactiveerde terminal. Je verlaat de omgeving later met deactivate.
Dit project gebruikt alleen de standaardbibliotheek van Python. Extra pakketten installeren is niet nodig.
03 - Testgegevens voorbereiden
Maak een map invoer met drie kopieën van oefenbestanden, bijvoorbeeld scan nieuw.txt, notitie.txt en foto.jpg. Kies voor de foto een echte afbeelding. Het doel is een naam als 2026-05-01_document_001.jpg, in alfabetische volgorde van de oorspronkelijke namen.
De datum is in deze oefening een vaste projectdatum. Bewaar de originele bestanden buiten de oefenmap.
04 - Begrippen en hulpmiddelen vóór de opdracht
- Je bouwt voort op de paden en CSV-uitvoer uit project A.
enumerate(bestanden, start=1)geeft tijdens de lus zowel het volgnummer als het bestand. - In een f-string bepaalt
:03dde weergave van een geheel getal: drie posities met voorloopnullen.1wordt001. TESTMODUSis een boolean:Truetoont alleen het plan,Falsevoert het uit.renamewijzigt een bestandsnaam.exists()controleert vooraf het doel.raise FileExistsError(...)stopt met een expliciete fout als een doel inmiddels bestaat.flush()schrijft de logregel direct door naar het bestandsobject.
- Het script bouwt eerst een volledig plan. Een bestaand doel stopt de uitvoering voordat het hernoemen begint.
{nummer:03d}maakt volgnummers met drie cijfers.suffixbewaart de laatste extensie.- Het log registreert iedere geslaagde wijziging. Dit is geen automatische herstelprocedure: bij een onderbreking kan een deel al hernoemd zijn. Gebruik de testmap zonder andere programma’s die er tegelijk bestanden in wijzigen.
05 - Een gerichte AI-prompt maken
Geef AI eerst een concrete opdracht. Kopieer bijvoorbeeld deze prompt en vergelijk het antwoord met de voorbeeldcode in het volgende blok:
Maak een script dat alleen bestanden direct in invoer hernoemt met patroon
2026-05-01_document_001 plus de oorspronkelijke extensie in kleine letters.
Sorteer op oorspronkelijke naam. Gebruik eerst TESTMODUS = True en toon alle
oude en nieuwe namen. Controleer vooraf alle doelpaden en stop bij ieder
conflict, ook als een doel een bronbestand is. Verwerk geen symbolische
links. Schrijf bij echte uitvoering een hernoemlog.csv buiten invoer.
Gebruik pathlib en csv en leg uit hoe ik de testmodus uitzet.
Vraag om uitleg bij onbekende regels en controleer welke bestanden de code leest en schrijft voordat je haar uitvoert. Gebruik de oefengegevens uit dit project.
06 - Een werkende basisversie
Dit is een complete basisversie voor hernoemen.py. Neem de code over of vergelijk haar met het antwoord van AI.
from pathlib import Path
import csv
BASIS = Path(__file__).resolve().parent
INVOER = BASIS / "invoer"
TESTMODUS = True
DATUM = "2026-05-01"
CATEGORIE = "document"
def main():
if not INVOER.is_dir():
print(f"Map ontbreekt: {INVOER}")
return
bestanden = sorted(p for p in INVOER.iterdir() if not p.is_symlink() and p.is_file())
plan = []
for nummer, bron in enumerate(bestanden, start=1):
doel = INVOER / f"{DATUM}_{CATEGORIE}_{nummer:03d}{bron.suffix.lower()}"
if doel.exists():
print(f"Gestopt: doel bestaat al: {doel.name}")
return
plan.append((bron, doel))
for bron, doel in plan:
print(f"{bron.name} -> {doel.name}")
if TESTMODUS:
print("Alleen een voorbeeld; er is niets hernoemd.")
return
with (BASIS / "hernoemlog.csv").open("w", newline="", encoding="utf-8") as bestand:
schrijver = csv.writer(bestand)
schrijver.writerow(["oude_naam", "nieuwe_naam"])
for bron, doel in plan:
if doel.exists():
raise FileExistsError(f"Doel bestaat inmiddels: {doel}")
bron.rename(doel)
schrijver.writerow([bron.name, doel.name])
bestand.flush()
print("Hernoemen klaar. Bekijk hernoemlog.csv.")
if __name__ == "__main__":
main()
07 - Het script uitvoeren
- Sla de volledige code op als
hernoemen.pyin je projectmap. Zet eventuele invoerbestanden op de plek die in blok 03 staat. - Open de geïntegreerde terminal in die projectmap en activeer
.venvals dat nog niet is gebeurd. - Voer het script uit met:
python hernoemen.py
Lees eerst de terminaluitvoer en open daarna eventuele uitvoerbestanden. Controleer het resultaat met blok 08 voordat je met eigen gegevens verdergaat.
08 - Het resultaat controleren
- Start met
TESTMODUS = True: alle drie de oude namen blijven bestaan. - Controleer de voorgestelde namen, zet daarna
TESTMODUS = Falseen voer opnieuw uit. Je krijgt drie nieuwe namen en drie regels in het log. - Start nogmaals: het script stopt omdat doelen al bestaan. Test een conflict ook in een verse oefenmap met een vooraf aangemaakt doelbestand.
09 - Fouten herkennen en oplossen
- Het script stopt bij een bestaand doel? Dat is de bedoelde controle. Begin voor een nieuwe proef met verse kopieën.
- PermissionError? Sluit geopende bestanden. Lees na een onderbroken uitvoering het log voordat je opnieuw begint.
10 - Uitbreiden en afronden
Probeer deze vervolgstap pas als de basis werkt:
Vraag AI om een controle op lege of ongeldige categorieën en om een bevestigingsvraag vóór het echte hernoemen. Laat de controle op bestaande namen behouden.
Bewaar je werkende basisversie en verander één onderdeel tegelijk. Geef AI bij een fout de foutmelding, het relevante stukje code, je testinvoer en de verwachte uitkomst.
Het project is afgerond wanneer de basiscontrole uit blok 08 slaagt en je in eigen woorden kunt uitleggen welke invoer wordt gebruikt, hoe de verwerking werkt en waar de uitvoer terechtkomt.