< Programmeren in Python

Bestandsinvoer en -uitvoer

Een volledig bestand inlezen kan als volgt:

Python-code: open

input_file_text = open("testit.txt", "r").read()
print(input_file_text)

Dit zal de inhoud van het bestand testit.txt inlezen, opslaan in een variable input_file_text en vervolgens op het scherm weergeven. Het tweede argument "r" wijst erop dat het bestand in read-only modus geopend dient te worden. 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

input_file_text = open("testit.txt", "r").read(123)
print(input_file_text)

Om een bestand regel per regel te verwerken kan men de functie readlines() gebruiken. Deze functie maakt een array, waarvan elke regel een apart element is. Dit voorbeeld zal de inhoud regel per regel tonen (bemerk dat print een extra tab introduceert):

Python-code: open

for line in open("testit.txt", "r").readlines():
    print line

Een alternatief is de functie readline() welke in plaats van een array, 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 positie wijzigen.

>>> f=open("/proc/cpuinfo","r")
>>> f.tell()
0L
>>> f.read(10)
'processor\t'
>>> f.read(10)
': 0\nvendor'
>>> f.tell()
20L
>>> f.seek(10)
>>> f.tell()
10L
>>> f.read(10)
': 0\nvendor'
>>> f.close()
>>> f
<closed file '/proc/cpuinfo', mode 'r' at 0xb7d79770>

In dit voorbeeld wordt het bestand /proc/cpuinfo geopend, f.tell() weet ons te zeggen 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, 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, hetzelfde resultaat als de tweede read() bekomen wordt (namelijk een leesoperatie van 10 bytes vanaf byte 10). 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

output_file_text = "Here's some text to save in a file"
open("testit.txt", "w").write(output_file_text)

Wanneer een bestaand bestand geopend wordt op deze manier 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

output_file_text = "Here's some text to add to the existing file."
open("testit.txt", "a").write(output_file_text)

Bestanden testen

Er zijn een aantal functies om een bestand (in de ruime zin van het woord dus ook directories, symbolische links, ...) te gaan testen. Op een standaard Linux systeem kan men bijvoorbeeld volgende uitvoer bekomen:

>>> import os
>>> os.path.exists("/proc/cpuinfo")
True
>>> os.path.exists("/")
True
>>> os.path.isfile("/")
False
>>> os.path.isfile("/proc/cpuinfo")
True
>>> os.path.isdir("/")
True
>>> os.path.isdir("/proc/cpuinfo")
False
>>> os.path.ismount("/")
True
>>> os.path.islink("/")
False
>>> os.path.islink("/vmlinuz")
True
>>> os.path.realpath("/vmlinuz")
'/boot/vmlinuz-2.6.24-21-generic'

Hierin wordt eerste 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:

import shutil
shutil.move("originallocation.txt","newlocation.txt")
shutil.copy("original.txt","copy.txt")
shutil.copytree("dir1","dir2")
shutil.rmtree("dir1")

Hierin 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:

import os
os.remove("file.txt")
This article is issued from Wikibooks. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.