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 bron
bestand 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 bron
bestand 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.