# Programmeren in Python/Bestanden

Met Python kun je bestanden openen om code, data, uit te lezen of weg te schrijven. In dit hoofdstuk worden een aantal manieren besproken om dit te doen.

## Bestand openen en uitlezen

Voordat je begint, met een Python script voor bestanden, het bestand in te lezen, moet je eerst een bestand aanmaken om dit uit te kunnen lezen. Maak een bestand aan met naam test.txt, en geef het de volgende inhoud:
Een volledig bestand inlezen kan als volgt:
Python-code: open
Dit script zal eerst het bestand test.txt openen en bewaren in de variabele input_file. Hiervoor wordt de ingebouwde functie open gebruikt. Het eerste argument is om aan te geven welk bestand er geopend moet worden. Het tweede argument is hoe je het bestand wilt lezen. In dit voorbeeld hebben we r gebruikt, dit staat voor read-onlhy wat betekent dat we het bestand enkel kunnen lezen, maar niet aanpassen. Met de methode read wordt het hele bestand uitgelezen en wordt de tekst in de variable input_file_text geschreven. Na het uitprinten van de tekst moet het bestand ook worden afgesloten en dit wordt gedaan met de methode close.
Om slechts een beperkt aantal bytes van een bestand in te lezen kan men het aantal bytes meegeven als parameter aan de read functie:
Python-code: open
Om een bestand regel per regel te verwerken kan men de functie readlines gebruiken. Deze functie maakt een array aan, waarvan elke regel een apart element is. Dit voorbeeld zal de inhoud regel per regel tonen (merk op dat print een extra tab introduceert):
Python-code: open
Een alternatief is om de functie readline in plaats van een array te gebruiken en de volgende regel in een bestand teruggeeft.
Normaal gezien begint men bij het begin van een bestand te lezen. Wanneer men gebruik maakt van de functie seek kan men de huidige lees (start) positie wijzigen.
In dit voorbeeld wordt het bestand /proc/cpuinfo geopend, f.tell vertelt ons dat we in het begin van het bestand beginnen te lezen. Vervolgens lezen we de eerste tien bytes, vervolgens lezen we nogmaals tien bytes. Nu weet f.tell ons te zeggen dat we ons op positie 20 in het bestand bevinden. Pas nu kan deze positie aangepast worden, door middel van f.seek(10) wordt de positie terug op locatie tien geplaatst, en het is duidelijk dat wanneer van daar gelezen wordt, we hetzelfde resultaat krijgen als de tweede read. Er wordt namelijk opnieuw een leesoperatie van 10 bytes vanaf byte 10 uitgevoerd). Na gebruik dient het geopende bestand nog gesloten te worden met de functie close.
Om naar een file te schrijven dient als tweede argument aan open niet "r" maar "w" (van write) meegegeven te worden:
Python-code: open
Wanneer een bestaand bestand op deze manier geopend wordt dan zal de inhoud van dit bestand onherroepelijk overschreven worden, indien men echter zaken wenst toe te voegen aan een bestaand bestand, dan kan met aan open de paramater "a" (van append) meegeven:
Python-code: open

## Bestanden testen

Er zijn een aantal functies om een bestand (in de meest ruime zin van het woord dus ook directories, symbolische links, ...) te gaan testen. Op een standaard Linux systeem kan men bijvoorbeeld volgende uitvoer verkrijgen:
Hierin wordt eerst de os module geïmporteerd. Vervolgens toont os.path.exists of een bepaald path bestaat. Met isfile, isdir, ismount en islink kan men achterhalen of het meegegeven path respectievelijk een geldig bestand, directory, mount-point of een symbolische link is. Met realpath kan de echte locatie van een symbolische link achterhaald worden.

## Algemene bestandsoperaties

De shutil bibliotheek biedt een aan high-level bestandsoperaties aan, zoals het kopiëren en hernoemen (al dan niet recursief) van bestanden en directories, bijvoorbeeld:
Hiermee wordt een bestand hernoemd, een bestand gekopieerd, een directorie recursief gekopieerd en een directory recursief verwijderd.
Om een individueel bestand te verwijderen kan men dan weer de os.remove functie uit de os module gebruiken: