/info/grudat03/filgrafik.py
).
Liksom i molekylfallet gäller det för dej att först bygga upp
hela trädstrukturen från en formel, men formeln tar nu många rader.
Katalogträdet ovan beskrivs på följande sätt
( labbar ( lab1 ) ( lab2 ( lab2a ) ( lab2b filx ) ( lab2c ) fil2 ) ( lab3 ) fily filz )På bilden syns bara kataloger, inte filer, men i
labbar
finns
filerna fily
och filz
och i lab2b
finns
filx
. Syntaxen för textbeskrivningen ska du själv fundera
ut och fylla i här:
<dir> ::= <subdirs>::= <files> ::=
python katalog.py ~henrik/labbarger utskriften ovan. Låt programmet börja så här.
# coding:iso-8859-1 from sys import argv from os import listdir from os.path import *Om du startar programmet enligt ovan kommer
argv
att bestå av python
-kommandots argument, alltså
argv[0]=katalog.py
och
argv[1]=~henrik/labbar
.
Anropet listdir(argv[1])
returnerar en vektor av
filer och underkataloger i den angivna katalogen och dom ska du
ju skriva ut. För att få alla underkataloger först och
vanliga filer sist är det bäst att gå igenom vektorn två
gånger och använda något av följande villkor
if isdir(name): - - - if isfile(name): - - -Ett problem är att listdir ger korta namn på underkatalogerna, till exempel
lab1
, medan isdir
vill ha det
långa namnet, alltså ~henrik/labbar/lab1
. Tydligen måste
du klistra ihop överkatalogens namn med ett snedstreck och ett
kortnamn för att isdir
ska bli nöjd. Men i dina utskrifter
vill du bara ha korta namn och det kommer fram med anropet
basename(longname)
.
Med rekursiva anrop till underkatalogerna kan hela utskriften
göras av ett enda anrop till funktionen lista
.
def lista(path): print "(" print basename(path) ls=listdir(path) - - -Om programmet anropas utan ett katalognamn som argument bör det använda katalognamnet ".", alltså den katalog man kör i.
dir.py
och fortsätt att
arbeta med den filen. Nu ska den också importera din kömodul och
filgrafikmodulen.
I stället för att bara skriva ut kataloger och filer ska du nu
även lägga in dom i en kö. Köns första post blir alltså vänsterparentesen,
den andra blir katlognamnet etc. Då kan du nämligen efteråt
bygga upp en trädstruktur från kön med rekursiv
medåkning, precis som i molekylfallet (fast klart enklare).
Noderna har nu textfälten name
och files
,
där files är en lång textsträng av filnamn med
emellan.
När kön har byggts färdigt ska anropet dir=readdir()
tillverka hela katalogträdet och sätta dir
till roten.
Och sedan ska anropet show(dir)
rita upp hela trädet.
Knapparna i grafiken reagerar när musen förs in över knappen
(
Med denna labb tackar Grudat för ditt intresse och dina goda insatser. Om du inte redan gjort webbkursvärderingen är tillfället nog inne nu!