Project A - Maak een bestandenoverzicht
01 - Projectoverzicht
- In dit project maak je je eerste praktische Python-script met hulp van AI
- Het script maakt automatisch een overzicht van een map op je computer
- Dit is handig wanneer je snel wilt weten welke bestanden in een map staan
- Je gebruikt hiervoor een testmap met bijvoorbeeld documenten, afbeeldingen en tekstbestanden
- Het script toont per bestand de naam, het bestandstype en eventueel de bestandsgrootte
- Het resultaat verschijnt eerst gewoon in de terminal van VS Code
- Daarna kun je AI vragen om het overzicht ook op te slaan als tekstbestand of CSV-bestand
- Je oefent vooral met het maken van een goede prompt, het uitvoeren van een Python-script en het controleren van het resultaat
02 - Projectmap en Python-omgeving
Eerst begrijpen: een virtual environment is een eigen Python-omgeving voor één project. De map .venv bewaart de interpreter en eventuele extra pakketten. Zo blijven installaties van projecten gescheiden. Je projectcode en testgegevens zet je naast die map.
Aanmaken doe je één keer per project met python -m venv .venv. -m start een Python-module, hier de ingebouwde module venv. Activeren doe je opnieuw in iedere nieuwe terminal, zodat python die projectomgeving gebruikt. Een actief (.venv) in de prompt is een herkenningspunt.
Een bestand .env is iets anders: dat kan configuratiewaarden bevatten. We gebruiken hier geen configuratiebestand; maak alleen de map .venv met het onderstaande commando.
Alle opdrachten met python, source of een activeringspad horen in de terminal van VS Code, zoals geoefend in hoofdstuk 1.
- Maak een eigen projectmap
project_aen open die map in VS Code. Maak daarin straksoverzicht.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 naast je script de map invoer. Maak daarin met VS Code twee tekstbestanden: notities.txt met de tekst Hallo Python en taken.txt met de tekst Oefenen. Voeg een lege submap archief toe.
Je leest alleen bestanden direct in invoer. Het overzicht komt buiten die map, zodat het zichzelf niet meetelt.
04 - Begrippen en hulpmiddelen vóór de opdracht
- Voorkennis: Python Basics 1 t/m 11. We gebruiken variabelen, lussen, functies, imports en
try/except. - pathlib is de standaardmodule voor bestandspaden. Een
Pathis een padobject;/voegt een map- of bestandsnaam toe.__file__bevat het pad van dit script,resolve()maakt het absoluut enparentkiest de bovenliggende map. is_dir(),is_file()enis_symlink()testen of een pad een map, bestand of symbolische link is. Zo’n link verwijst naar een andere plek; die slaan we over.nameis de naam,suffixde laatste extensie enstat()geeft bestandseigenschappen.- CSV is tekst in tabelvorm: iedere regel is een rij, komma’s scheiden de kolommen. De eerste rij bevat kolomnamen. De standaardmodule
csvschrijft dat formaat metwriterowvoor één rij enwriterowsvoor meerdere.newline=""laat de module de regeleinden regelen. sorted()ordent de paden.pad.suffix.lower() or "(geen)"kiest de rechterwaarde als de extensie leeg is. Bijprint(*regel, sep=" | ")deelt de ster de lijst op in losse argumenten;sepkiest hun scheidingsteken.- Een f-string begint met
fvóór de aanhalingstekens. Python vult de waarden tussen{ }in, bijvoorbeeldf"Map: {INVOER}". Het startblokif __name__ == "__main__":roeptmain()alleen aan als je dit script rechtstreeks start. Python vult__name__dan met"__main__"; bij importeren wordt dit de modulenaam en slaat Python het startblok over.
Path(__file__).resolve().parentbepaalt de map van het script. Daardoor blijven de paden juist als je vanuit een andere werkmap start.iterdir()bekijkt één mapniveau.stat().st_sizegeeft de grootte in bytes, niet de schijfruimte die het bestand inneemt.csv.writerzorgt dat namen met komma’s correct worden opgeslagen. Een bestaandeoverzicht.csvwordt bij iedere uitvoering vernieuwd.
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 beginnersscript met pathlib en csv dat bestanden direct in de map
invoer naast het script alfabetisch opsomt. Toon naam, extensie en grootte
in bytes. Sla dezelfde gegevens op in overzicht.csv naast het script, met
kolommen naam,extensie,bytes. Negeer submappen, meld een ontbrekende map en
vang leesfouten per bestand af. Verander geen invoerbestanden. Leg de code
uit.
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 overzicht.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"
UITVOER = BASIS / "overzicht.csv"
def main():
if not INVOER.is_dir():
print(f"Maak eerst deze map: {INVOER}")
return
regels = []
for pad in sorted(INVOER.iterdir()):
try:
if pad.is_symlink() or not pad.is_file():
continue
regel = [pad.name, pad.suffix.lower() or "(geen)", pad.stat().st_size]
regels.append(regel)
print(*regel, sep=" | ")
except OSError as fout:
print(f"Overgeslagen: {pad.name}: {fout}")
with UITVOER.open("w", newline="", encoding="utf-8") as bestand:
schrijver = csv.writer(bestand)
schrijver.writerow(["naam", "extensie", "bytes"])
schrijver.writerows(regels)
print(f"{len(regels)} bestanden. Opgeslagen: {UITVOER}")
if __name__ == "__main__":
main()
07 - Het script uitvoeren
- Sla de volledige code op als
overzicht.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 overzicht.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
- Je krijgt twee gegevensregels; de submap
archiefstaat niet in het overzicht. - Open
overzicht.csvin VS Code. De kopregel isnaam,extensie,bytesen de groottes komen overeen met de bestandseigenschappen. - Voeg
extrazonder extensie toe: de extensie wordt(geen). Test daarna een lege invoermap: er blijft alleen een CSV-kopregel over.
09 - Fouten herkennen en oplossen
- Geen bestanden zichtbaar? Controleer of ze in
invoernaast het script staan en geen extra extensie hebben gekregen. - Een toegangs- of schrijffout? Sluit het CSV-bestand in Excel en kies een projectmap waarin je mag schrijven.
10 - Uitbreiden en afronden
Probeer deze vervolgstap pas als de basis werkt:
Laat AI een filter voor extensies toevoegen, bijvoorbeeld alleen .txt. Geef aan dat de terminal en de CSV exact dezelfde selectie moeten bevatten. Test met een .txt- en een .csv-bestand.
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.