0%

Bestanden, mappen en paden · oefening

Absolute en relatieve paden

data/observations.csv bevat niet genoeg informatie om iets te vinden. Het vertelt waar je heen moet als je al weet waar je begint, maar zegt niets over dat beginpunt.

Elk pad wordt vanuit een startpunt bepaald. Een absoluut pad geeft zijn eigen startpunt aan. Een relatief pad neemt dat over van de plek waar je op dat moment bent.

In een bestandsbeheerder is “waar je op dat moment bent” de map waarvan je nu de inhoud bekijkt. Zodra je instructies typt in plaats van klikt, krijgt die map een vaste naam: de werkmap. Eén relatief pad komt vanuit twee verschillende startmappen bij twee verschillende bestanden uit.

Twee routes naar één bestand

Stel dat dit de werkmap is:

/home/sam/Documents/field-notes

Beide paden bereiken hetzelfde bestand. De labels Absolute en Relative betekenen absoluut en relatief:

Absolute: /home/sam/Documents/field-notes/data/observations.csv
Relative: data/observations.csv

De / vooraan maakt het eerste pad absoluut: het betekent overal op de computer hetzelfde. Het tweede begint met data, dus het bepalen van de route begint waar je nu bent.

Verander je de werkmap in /home/sam/Documents/field-notes/drafts, dan zoekt hetzelfde relatieve pad nu een map data binnen drafts. Die is er niet. Het pad veranderde niet; de betekenis wel.

Om vanaf daar de echte data te bereiken, ga je eerst omhoog:

../data/observations.csv

Twee punten, .., betekenen de bovenliggende map. Eén punt, ., betekent de huidige map. Daarom komen ./data/observations.csv en data/observations.csv op dezelfde plek uit.

Het schema hieronder volgt beide startpunten naar hetzelfde absolute bestand: eerst vanuit field-notes, daarna vanuit drafts. ONE UNIX TREE betekent één Unix-boom; PROJECT DIRECTORY is de projectmap. START geeft het startpunt aan en SAME ABSOLUTE TARGET hetzelfde absolute doel. De paden en namen blijven precies zoals ze zijn geschreven.

Een projectboom onderscheidt de root van het bestandssysteem van Sams persoonlijke map. Vanuit field-notes is het relatieve pad data/observations.csv; vanuit drafts is dat ../data/observations.csv. Het absolute pad blijft vanaf beide plaatsen hetzelfde.

Het doel is nooit verplaatst. Alleen de routebeschrijving veranderde, omdat je startpunt veranderde.

Dezelfde redenering op Windows

Werkmap:

C:\Users\Sam\Documents\field-notes

Beide bereiken het bestand. Ook hier staan Absolute en Relative voor absoluut en relatief:

Absolute: C:\Users\Sam\Documents\field-notes\data\observations.csv
Relative: data\observations.csv

De stationsletter plus de backslash na de dubbele punt maakt het eerste pad absoluut. Bij C:data\observations.csv ontbreekt die backslash. Dat is geen volledig pad vanaf de root van het station. Schrijf C:\... als je absoluut bedoelt, dan ontstaat die dubbelzinnigheid niet.

Vanuit C:\Users\Sam\Documents\field-notes\drafts:

..\data\observations.csv

Je werkmap is /home/sam/Documents/field-notes/drafts. Welk relatief pad bereikt /home/sam/Documents/field-notes/data/observations.csv?

Bepaal een pad op papier

Doe dit voordat je een opdracht iets laat veranderen. Blijf het doen totdat het vanzelf gaat:

  1. Schrijf de werkmap op.

  2. Bepaal of het pad opnieuw bij een root begint of vanaf je huidige plek start.

  3. Neem elk segment van links naar rechts. Blijf staan bij ., ga omhoog bij .. en daal af bij een naam.

  4. Schrijf op waar je uitkwam en vergelijk dat met waar je wilde uitkomen.

Probeer het. Werkmap C:\Users\Sam\Documents\field-notes\data\raw, pad ..\..\drafts\outline.txt. Start is het begin; target is het doel:

Start:  C:\Users\Sam\Documents\field-notes\data\raw
..      C:\Users\Sam\Documents\field-notes\data
..      C:\Users\Sam\Documents\field-notes
drafts  C:\Users\Sam\Documents\field-notes\drafts
target: C:\Users\Sam\Documents\field-notes\drafts\outline.txt

Dat kost vier regels zonder te gokken en werkt op elk platform hetzelfde.

Werkmap /home/sam/field-notes/data/raw, pad ../../drafts/outline.txt. Zet de stappen voor het bepalen van het pad op volgorde:

Sleep de opties in de juiste volgorde of gebruik de pijlknoppen.

  • .. gaat naar /home/sam/field-notes/data

  • outline.txt duidt het bestand op /home/sam/field-notes/drafts/outline.txt aan

  • drafts daalt af naar /home/sam/field-notes/drafts

  • Begin bij /home/sam/field-notes/data/raw

  • .. gaat naar /home/sam/field-notes

Als dezelfde relatieve schrijfwijze vandaag anders werkt, is een veranderde werkmap een mogelijke oorzaak. Vergelijk het startpunt van vandaag en de doelboom voordat je iets verplaatst. Een pad vanaf de verkeerde plek kan een ander doel bereiken of helemaal niets aanduiden. Beide uitkomsten geven informatie over waar de route voor het eerst niet meer klopte.

Je hebt dit allemaal gedaan zonder een shell te gebruiken. De laatste les van dit hoofdstuk past het toe op een project dat je over zes maanden nog kunt terugvinden.