Je weet nu alles wat je moet weten om tekstbestanden in Python te
manipuleren. Er zijn nog een aantal handige functies beschikbaar die het
werken met bestanden vergemakkelijken. Deze vind je in de os.path
module. Zoals gewoonlijk geef ik ze hier niet allemaal, maar ik noem wel
de functies die je het meest zult gebruiken.
In deze functies refereert de term “pad” (Engels: “path”) aan een bestandsnaam of directory naam, compleet met het volledige pad vanaf de “root.” Zelfs als het pad niet volledig genoemd is, is het impliciet opgenomen aangezien ieder bestand op een specifieke plaats in het bestandssysteem te vinden is.
exists()
De functie exists()
krijgt een pad als argument, en retourneert True
als het pad bestaat, en anders False
.
from os.path import exists
if exists( "pc_rose.txt" ):
print( "pc_rose.txt bestaat" )
else:
print( "pc_rose.txt bestaat niet" )
if exists( "pc_tulip.txt" ):
print( "pc_tulip.txt bestaat" )
else:
print( "pc_tulip.txt bestaat niet" )
isfile()
isfile()
test of het pad dat als argument gegeven is een bestand is.
Als het dat is, retourneert de functie True
. Anders retourneert het
False
. Als het pad in het geheel niet bestaat, retourneert de functie
ook False
.
from os.path import isfile
if isfile( "pc_rose.txt" ):
print( "pc_rose.txt is een bestand" )
else:
print( "pc_rose.txt is geen bestand" )
isdir()
isfile()
test of het pad dat als argument gegeven is een directory
(folder) is. Als het dat is, retourneert de functie True
. Anders
retourneert het False
. Als het pad in het geheel niet bestaat,
retourneert de functie ook False
.
from os.path import isdir
if isdir( "pc_rose.txt" ):
print( "pc_rose.txt is een directory" )
else:
print( "pc_rose.txt is geen directory" )
join()
join()
krijgt één of meerdere delen van een pad mee als argument, en
plakt die op een redelijk slimme manier aan elkaar om een geschikte naam
voor een pad te vormen, die het retourneert. Dit betekent dat het
“slashes” verwijdert of toevoegt waar nodig. join()
is vooral handig
in combinatie met listdir()
(uitgelegd in hoofdstuk
161,
en als voorbeeld gebruikt hieronder).
De reden dat join()
handig is in combinatie met listdir()
, is dat
listdir()
een list van bestandsnamen teruggeeft, waarbij de directory
namen niet zijn opgenomen. Als je een list van bestandsnamen vraagt, wil
je ze meestal op een of ander moment openen. Maar als je een bestand
probeert te openen dat niet in de huidige directory staat, dan moet je
het complete pad kennen. Als je listdir()
uitvoert, geef je de
directory mee als argument, dus je weet waar de bestanden zich bevinden.
Om een compleet pad te bouwen, moet je dus die directory naam aan de
naam van ieder bestand toevoegen. In plaats van zelf te beslissen waar
je “slashes” moet zetten (en wat voor slashes het moeten zijn), kun je
de samenstelling van het pad overlaten aan de join()
functie.
De code hieronder zoekt alle bestanden in de huidige directory, en toont
ze inclusief het complete pad. De code laat zien hoe je een padnaam
bouwt middels join()
.
from os import listdir, getcwd
from os.path import join
bestandslist = listdir( "." )
for naam in bestandslist:
pad = join( getcwd(), naam )
print( pad )
basename()
basename()
haalt de bestandsnaam uit een pad, en retourneert die.
from os.path import basename
print( basename( "/System/Home/readme.txt" ) )
dirname()
dirname()
haalt de directory naam uit een pad, en retourneert die.
from os.path import dirname
print( dirname( "/System/Home/readme.txt" ) )
getsize()
getsize()
krijgt een pad als argument, en retourneert de grootte van
het betreffende bestand als een integer (die het aantal bytes
weergeeft). Als het pad geen bestand is, krijg je een runtime error.
from os.path import getsize
num = getsize( "pc_rose.txt" )
print( num )
Schrijf een programma dat de groottes van alle bestanden in de huidige directory bij elkaar optelt, en het resultaat toont.