Schrijf een procedure kopieer_bestand(bron, doel) met twee parameters. De eerste parameter bron bevat de naam van een bestaand bestand, de tweede parameter doel bevat de gewenste naam voor de kopie.

Door het aanroepen van deze procedure wordt de volledige inhoud van het opgegeven bronbestand gekopieerd naar het doelbestand. Indien er al een bestand bestaat met de opgegeven naam voor de kopie, dan moet de inhoud van dat bestand overschreven worden. Anders moet een nieuw bestand aangemaakt worden met de opgegeven naam doel. Je mag ervan uitgaan dat het bronbestand bestaat.
Let op! Maak een oplossing die ook in staat is om heel grote bestanden te kopiëren. Dit wordt gecontroleerd in Dodona met een aparte test.

Voorbeeld

>>> kopieer_bestand('zenPython.txt', 'kopie.txt')
Deze aanroep maakt het bestand kopie.txt met een identieke inhoud als het gegeven bestand zenPython.txt.

Feedback Dodona

Omdat Dodona niet enkel de procedure moet aanroepen, maar ook moet controleren of het bestand correct gekopiëerd is, gebeurt dit in twee stappen:
kopieer_bestand('zenPython.txt', 'kopie.txt')
controleer_bestand()
De eerste stap roept de procedure aan. De tweede stap controleert of de kopie echt identiek is aan het origineel bestand.
Enkel voor de eerste stap (aanroep van de procedure) kan je de Tutor gebruiken.

Tips

Wat is een procedure? Een 'procedure' is eigenlijk een functie die niets teruggeeft - geen return toevoegen.
Ik vind het juiste type niet voor de parameters. def kopieer_bestand(bronbestand: str, doelbestand: str) -> None:
Wat betekent None? Dit geeft aan dat er geen return-waarde is.
Hoe kan ik lezen van een bestand en schrijven naar een ander bestand? Gebruik twee bestandsobjecten en open die allebei met de juiste "modus" "r" of "w"
Hoe kan ik een volledig bestand kopiëren? Overloop alle lijnen van je bronbestand en schrijf die ondertussen lijn per lijn naar het doelbestand.
De kopie lijkt identiek, maar mijn oplossing is fout in Dodona. Vergelijk de grootte van beide bestanden, dan is de kopie een beetje groter omdat er extra whitespace is toegevoegd (die je niet ziet)!
De oplossing hiervoor:
  • Verwijder \n op het einde elke ingelezen lijn met .strip()
  • Gebruik print(..., end="")
Kan het bestand ook in één keer ingelezen worden? Dat kan, maar je doet dit beter niet omdat het bestand heel groot kan zijn. In deze oefening wordt dit fout gerekend! Lijn per lijn verwerken is dus de enige juiste oplossing.
Hoe kan ik dit uittesten zonder Dodona?
  • Bekijk de inleiding bij deze reeks!
  • De aanroep van de methode staat klaar!
  • Controleer in VSCode of het doelbestand ook wordt gemaakt in de folder waarin je bronbestand staat.
  • Controleer zelf of de inhoud volledig dezelfde is.