5. Filer

Programmeringsteknik

(Skillnad mellan versioner)
Hoppa till: navigering, sök
Versionen från 27 juni 2007 kl. 14.39 (redigera)
KTH.SE:u1ndpe5c (Diskussion | bidrag)

← Gå till föregående ändring
Nuvarande version (11 februari 2008 kl. 10.26) (redigera) (ogör)
KTH.SE:u1rp004j (Diskussion | bidrag)
m
 
(18 mellanliggande versioner visas inte.)
Rad 1: Rad 1:
==Filer== ==Filer==
-<p>Information som man vill ha kvar p&aring; en dator sparas p&aring; fil. Det kan t&nbsp;ex r&ouml;ra sig om ett brev som har skapats med hj&auml;lp av ett ordbehandlingsprogram, en bild som har skapats av ett ritningsprogram eller en kamera osv. Filer sparas p&aring; l&aring;ngtidsminnen som t ex datorns skivminne (h&aring;rddisken). N&auml;r man sparat en fil p&aring; h&aring;rddisken kommer filen att finnas kvar d&auml;r &auml;ven n&auml;r man har startat om datorn eller t&nbsp;ex n&auml;r det blir str&ouml;mavbrott. D&auml;rf&ouml;r &auml;r det bra att spara den programkod man skriver p&aring; en fil f&ouml;r senare bearbetning. Dels f&ouml;r att det s&auml;llan blir r&auml;tt f&ouml;rsta g&aring;ngen, dels f&ouml;r att n&auml;r man v&auml;l provk&ouml;rt kommer man p&aring; fler saker man &ouml;nskar av programmet. </p>+Information som man vill ha kvar p&aring; en dator sparas p&aring; fil. Det kan t&nbsp;ex r&ouml;ra sig om ett brev som har skapats med hj&auml;lp av ett ordbehandlingsprogram, en bild som har skapats av ett ritningsprogram eller en kamera osv. Filer sparas p&aring; l&aring;ngtidsminnen som t ex datorns skivminne (h&aring;rddisken). N&auml;r man sparat en fil p&aring; h&aring;rddisken kommer filen att finnas kvar d&auml;r &auml;ven n&auml;r man har startat om datorn eller t&nbsp;ex n&auml;r det blir str&ouml;mavbrott. D&auml;rf&ouml;r &auml;r det bra att spara den programkod man skriver p&aring; en fil f&ouml;r senare bearbetning. Dels f&ouml;r att det s&auml;llan blir r&auml;tt f&ouml;rsta g&aring;ngen, dels f&ouml;r att n&auml;r man v&auml;l provk&ouml;rt kommer man p&aring; fler saker man &ouml;nskar av programmet.
-<p>Filer delas upp i tre sorter:</p>+Filer kan delas upp i tre sorter:
-<p><ol>+* Vanliga filer: som inneh&aring;ller data (t ex text eller bildinformation).
- <li>Vanliga filer: som inneh&aring;ller data (t ex text eller bildinformation).+* Katalog eller mapp: som inneh&aring;ller andra filer.
- <li>Katalog eller mapp: som inneh&aring;ller andra filer.+* L&auml;nkar, genv&auml;gar eller alias: En fil som refererar till en fil.
- <li>L&auml;nkar, genv&auml;gar eller alias: En fil som refererar till en fil.+
-</ol></p>+
-<p>Kataloger anv&auml;nds f&ouml;r att organisera filer och program. Kataloger kan inneh&aring;lla andra kataloger. T ex kan man spara alla filer som har skapats i samband med sommarkursen under katalogen &rdquo;sommarkurs&rdquo;. Strukturen kallas i datorsammanhang ofta f&ouml;r ett filtr&auml;d.</p>+Kataloger anv&auml;nds f&ouml;r att organisera filer och program. Kataloger kan inneh&aring;lla andra kataloger. T ex kan man spara alla filer som har skapats i samband med sommarkursen under katalogen &rdquo;sommarkurs&rdquo;. Strukturen kallas i datorsammanhang ofta f&ouml;r ett filtr&auml;d.
 + 
 +L&auml;nkar anv&auml;nds t ex f&ouml;r att man ska kunna hitta samma fil p&aring; flera st&auml;llen. En bildfil kan ta stor plats och en popul&auml;r bild kan man vilja ha med p&aring; m&aring;nga st&auml;llen. F&ouml;r att slippa kopiera bilden l&auml;gger man d&aring; ist&auml;llet l&auml;nkar till den. L&auml;nkarna tar n&auml;stan ingen plats alls.
-<p>L&auml;nkar anv&auml;nds t ex f&ouml;r att man ska kunna hitta samma fil p&aring; flera st&auml;llen. En bildfil kan ta stor plats och en popul&auml;r bild kan man vilja ha med p&aring; m&aring;nga st&auml;llen. F&ouml;r att slippa kopiera bilden l&auml;gger man d&aring; ist&auml;llet l&auml;nkar till den. L&auml;nkarna tar n&auml;stan ingen plats alls.</p> 
==Filhantering== ==Filhantering==
-<p>P&aring; n&auml;stan alla datorer finns det ett grafiskt anv&auml;ndargr&auml;nssnitt (det du ser p&aring; sk&auml;rmen) som kan anv&auml;ndas f&ouml;r att organisera filer mha musen, kortkommandon eller ett filhanteringsprogram.</p>+P&aring; n&auml;stan alla datorer finns det ett grafiskt anv&auml;ndargr&auml;nssnitt (det du ser p&aring; sk&auml;rmen) som kan anv&auml;ndas f&ouml;r att organisera filer med hjälp av musen, kortkommandon eller ett filhanteringsprogram.
-<p>Filer, kataloger och l&auml;nkar har d&aring; grafiska symboler som kallas f&ouml;r ikoner. F&ouml;ljande bilder visar hur olika ikoner ser ut i ett Mac/OS X operativsystem:</p>+Filer, kataloger och l&auml;nkar har d&aring; grafiska symboler som kallas f&ouml;r ikoner. F&ouml;ljande bilder visar hur olika ikoner ser ut i ett Mac/OS X operativsystem:
[[Bild:800176.jpg]] [[Bild:800177.jpg]] [[Bild:800178.jpg]] [[Bild:800176.jpg]] [[Bild:800177.jpg]] [[Bild:800178.jpg]]
-<p>I programmeringssammanhang &auml;r det v&auml;ldigt vanligt att anv&auml;nda tangentbordskommandon f&ouml;r filhanteringen, t ex för att utföra:</p>+I programmeringssammanhang &auml;r det v&auml;ldigt vanligt att anv&auml;nda tangentbordskommandon f&ouml;r filhanteringen, t ex för att utföra:
- +
-<p><ol>+
- <li>F&ouml;rflyttning i filtr&auml;det.+
- <li>Kopiering av filer.+
- <li>Radering av filer.+
-</ol></p>+
- +
-<p>Ofta &auml;r den grafiska filhanteringen enklare, men i programmeringssammanhang vill man anv&auml;nda tangentbordskommandon s&aring; mycket som m&ouml;jligt eftersom det g&aring;r snabbare (n&auml;r man v&auml;l kan det).</p>+
- +
-==F&ouml;rflyttning i filtr&auml;d==+
- +
-<p>Tangentbordskommandon anv&auml;nder man i ett terminalf&ouml;nster. För att öppna ett terminalfönster på en Windowsdator: tryck först på windows-tangenten, håll den nere och tryck därefter på R. I det fönster som öppnas, skriv in CMD och tryck retur. Har du Macintosh OS X kan du se Python-tolk-instruktionerna i avsnitt 1.9 om villkor om du gl&ouml;mt hur man &ouml;ppnar ett s&aring;dant. Vi b&ouml;rjar med kommandot cd (som st&aring;r f&ouml;r <b>c</b>hange <b>d</b>irectory - byt katalog) anv&auml;nds f&ouml;r att f&ouml;rflytta sig i filtr&auml;det.</p>+
- +
-<p>Antag att man befinner sig i katalogen "sommarkurs" och man vet att i katalogen finns en annan katalog med namnet "test". D&aring; kan man skriva f&ouml;ljande kommando f&ouml;r att flytta sig till katalogen "test":</p>+
- +
- +
-<div class="codebox"><div class="title">Terminalfönster</div>&gt;cd test</div>+
- +
- +
-<p>Det finns tv&aring; speciella namn "." och ".." som har stor betydelse f&ouml;r systemet.</p>+
- +
-<p>"." betyder aktuella katalogen.</p>+
- +
-<p>".." betyder katalogen som inneh&aring;ller aktuella katalogen (dvs katalogen ovanför den aktuella katalogen).</p>+
- +
-<p>"." och ".." kommer att automatiskt finnas i varje katalog.</p>+
- +
-<p>Vad begreppet "aktuell katalog" betyder brukar framg&aring; efter ett tags användning, men en analogi &auml;r rum i ett hus. Om du g&aring;r in i ett rum, t ex ditt sovrum så är sovrummet det aktuella rummet. R&auml;knar du upp alla m&ouml;bler där, så får du ett annat resultat än om du r&auml;knar upp m&ouml;blerna i t ex k&ouml;ket. En niv&aring; upp (katalogen ovanf&ouml;r) kan du j&auml;mst&auml;lla med huset (om du tänkte på en villa) eller l&auml;genheten. En niv&aring; ner (en katalog i rummet) skulle kunna motsvaras av en garderob. I en dator finns det inga begr&auml;nsningar på antalet niv&aring;er man kan ha, men det gör det f&ouml;rst&aring;s i verkligheten.</p>+
- +
-<p>I samband med kommandot "cd" f&ouml;rekommer ofta tv&aring; andra viktiga kommandon "ls" och "pwd". Kommandot "ls" (som st&aring;r f&ouml;r list, lista) eller "dir" i dos anv&auml;nds f&ouml;r att lista vilka filer finns i katalogen och "pwd" (som st&aring;r f&ouml;r print working directory, skriv aktuellt katalognamn) (motsvarande pwd finns inte i dos, ist&auml;llet skrivs katalognamnet alltid ut) anv&auml;nds f&ouml;r att ta reda p&aring; namn p&aring; den aktuella katalogen. Betrakta f&ouml;ljande bild:</p>+
- +
-[[Bild:795530.jpg]]+
- +
-<p>I forts&auml;ttningen visas anv&auml;ndarens inmatning i fet stil, resten av texten skrivs av datorn. N&auml;r den aktuella katalogen &auml;r sommarkurs och man skriver f&ouml;ljande kommandon i tur och ordning f&aring;r man dessa svar av datorn:</p>+
- +
-<div class="codebox-divided">+
-<div class="codecolumn1">+
-<div class="title">Unix/Mac OS X</div>+
-<pre>&gt;pwd+
-sommarkurs+
-&gt;ls+
-programkod&nbsp;test+
-&gt;cd programkod+
-&gt;pwd+
-sommarkurs/programkod+
-&gt;ls+
-Prog.py&nbsp;Prog2.py+
-&gt;cd Prog.py+
-Prog.py: Not a directory+
-&gt;cd ..+
-&gt;pwd+
-sommarkurs+
-&gt;cd test/Katalog1+
-&gt;pwd+
-sommarkurs/test/katalog1+
-&gt; </pre></div>+
-<div class="codecolumn2">+
-<div class="title">DOS</div>+
-<pre>C:\sommarkurs>dir+
-06-05-01 11.45 &lt;DIR&gt; programkod +
-06-05-02 20:23 &lt;DIR&gt; test+
-C:\sommarkurs&gt;cd programkod +
-C:\sommarkurs\programkod&gt; dir +
-06-06-01 &lt;DIR&gt; . +
-06-06-01 &lt;DIR&gt; .. +
-06-06-02 10.45 1024 PROG.PY +
-06-05-11 11.11 2048 PROG2.PY +
-C:\sommarkurs\programkod&gt; cd prog.py+
-The directory name is invalid+
-C:\sommarkurs\programkod&gt; cd ..+
-C:\sommarkurs&gt; cd test/Katalog1+
-C:\sommarkurs\test\Katalog1&gt;</pre></div></div>+
- +
- +
-<span style="color:red">[FRÅGOR]</span>+
- +
-==Kopiera filer==+
- +
-<p>Kommandot cp (som st&aring;r f&ouml;r copy, kopiera) eller copy i DOS anv&auml;nds f&ouml;r att kopiera filer. Anta att aktuella katalogen &auml;r sommarkurs&nbsp;och vi vill kopiera filen Prog.py som finns i katalogen sommarkurs/programkod till katalogen Katalog1.</p>+
- +
-<p>Efter kopieringen kommer vi att f&aring; f&ouml;ljande filstruktur:</p>+
- +
-[[Bild:795531.jpg]]+
- +
-<div class="codebox-divided" style="width: 565px;"><div class="codecolumn1"><div class="title">Unix/Mac OS X</div><pre>&gt;pwd+
-sommarkurs+
-&gt;cp programkod/Prog.py test/Katalog1/+
-&gt;</pre></div><div class="codecolumn2"><div class="title">DOS</div><pre>C:\sommarkurs&gt;copy programkod\Prog.py test\Katalog1\+
-C:\sommarkurs&gt;</pre></div></div>+
- +
-<p>Första kommandot pwd är för att säkerställa att vi är i rätt katalog, detta kommando är alltså inte nödvändigt om man vet att aktuella katalogen är sommarkurs.<br />+
-Den andra kommandoraden består av följande tre delar:<br />+
-Själva kommandot: cp (copy i dos)<br />+
-Sökvägen till källan (dvs den fil man vill kopiera)<br />+
-Sökvägen till destinationen (dvs den katalog man vill kopiera filen till)</p>+
- +
-<p>Om man vill kopiera en hel katalog med alla filer den innehåller måste man även ange flaggan r , (i dos finns ett eget kommando för detta xcopy med flaggan /s får man nästan samma effekt). Anta att vi vill kopiera hela katalogen test med alla filer som finns i den till programkod. Detta gör vi med följande kommando om den aktuella katalogen är sommarkurs:</p>+
- +
-<div class="codebox-divided" style="_width: 480px;"><div class="codecolumn1"><div class="title">Unix/Mac OS X</div><pre>cp -r test programkod</pre></div><div class="codecolumn2"><div class="title">DOS</div><pre>C:\sommarkurs>xcopy /s test programkod</pre></div></div>+
- +
-<p>Efter kopieringen får vi följande struktur:</p>+
- +
- +
-[[Bild:795532.jpg]]+
- +
- +
-<span style="color:red">[FRÅGOR]</span>+
- +
-==Radera filer==+
-<p><strong>Varning:</strong> Det finns en viktig skillnad mellan terminalf&ouml;nsterbaserad filhantering och grafisk filhantering n&auml;r det g&auml;ller borttagning av filer. N&auml;r man tar bort en fil med hj&auml;lp av den grafiska filhanteraren kommer filen hamna i en speciell katalog som brukar kallas f&ouml;r papperskorg, allts&aring; filen &auml;r inte riktigt borttagen fr&aring;n datorn (vill man ta bort filen s&aring; m&aring;ste man t&ouml;mma papperskorgen). N&auml;r man anv&auml;nder terminalf&ouml;nsterbaserad filhantering f&ouml;rsvinner alla filer som tas bort f&ouml;r gott. D&auml;rf&ouml;r ska man vara v&auml;ldigt f&ouml;rsiktig n&auml;r man ta bort filer i terminalf&ouml;nstret.</p>+
- +
-<p><span class="code">rm</span> (som st&aring;r f&ouml;r <b>r</b>e<b>m</b>ove) eller del i DOS &auml;r kommandot som anv&auml;nds f&ouml;r att ta bort filer. Anta att aktuella katalogen &auml;r sommarkurs och man vill ta bort filen <span class="code">Prog2.py</span>. F&ouml;ljande kommando tar bort filen <span class="code">Prog2.py</span>:</p>+
- +
-<div class="codebox-divided" style="_width:470px;"><div class="codecolumn1"><div class="title">Unix/Mac OS X</div><pre>&gt;rm programkod/Prog2.py+
-&gt;</pre></div><div class="codecolumn2"><div class="title">DOS</div><pre>C:\sommarkurs&gt;del programkod\prog2.py+
-C:\sommarkurs&gt;</pre></div></div>+
- +
-<p>S&aring; h&auml;r kommer filstrukturen se ut efter borttagningen:</p>+
- +
- +
-[[Bild:795533.jpg]]+
- +
-<p>Om man vill ta bort en hel katalog med alla filer i ska man i UNIX-baserade operativystem &aring;terge flaggan r till kommandot <span class="code">rm</span>.</p>+
- +
-<p>I Windows är det däremot annorlunda - kommandot <span class="code">del</span> som vi använde oss av ovan fungerar bara på filer, inte mappar. Istället är kommandot <span class="code">rmdir</span> det som gäller. Om mappen inte är tom måste man även ange flaggan S.</p>+
- +
-<p>Antag att den aktuella katalogen &auml;r sommarkurs och man vill ta bort katalogen test som finns under katalogen programkod med f&ouml;ljande kommando:</p>+
- +
-<div class="codebox-divided"><div class="codecolumn1"><div class="title">Unix/Mac OS X</div><pre>&gt;rm -r programkod/test+
-&gt;</pre></div><div class="codecolumn2"><div class="title">DOS</div><pre>C:\sommarkurs&gt;rmdir /S programkod\test+
-C:\sommarkurs&gt;</pre></div></div>+
- +
-<p>Bilden nedan visar filstrukturen efter borttagning:</p>+
- +
-[[Bild:795534.jpg]]+
- +
-<span style="color:red">[FRÅGOR]</span>+
- +
-==Flytta filer==+
- +
-<p>Om man vill flytta en fil fr&aring;n en katalog till en annan katalog kan man anv&auml;nda sig av kommandot <span class="code">mv</span> (som st&aring;r f&ouml;r move) eller <span class="code">move</span> i DOS. Anta nu att den aktuella katalogen &auml;r sommarkurs och man vill flytta filen <span class="code">prog.py</span> fr&aring;n katalogen <span class="code">programkod</span> till katalogen <span class="code">test</span>. Detta g&ouml;rs med hj&auml;lp av f&ouml;ljande kommandorad:</p>+
- +
-<div class="codebox-divided" style="_width: 500px;"><div class="codecolumn1"><div class="title">Unix/Mac OS X</div><pre>&gt;mv programkod/Prog.py test/+
-&gt;</pre></div><div class="codecolumn2"><div class="title">DOS</div><pre>C:\sommarkurs&gt;move programkod\prog.py test+
-C:\sommarkurs&gt;</pre></div></div>+
- +
-<p>Ovanst&aring;ende kommando best&aring;r av tre f&ouml;ljande delar:</p>+
- +
-<p><ol>+
- <li>Sj&auml;lva kommandot: <span class="code">mv</span>+
- <li>Hela s&ouml;kv&auml;gen till k&auml;llan: <span class="code">programkod/prog.py</span>+
- <li>Hela s&ouml;kv&auml;gen till destinationen: <span class="code">test/</span>+
-</ol></p>+
- +
-<p>S&aring; h&auml;r ser fil-strukturen ut:</p>+
- +
-[[Bild:795536.jpg]]+
- +
-<p>Observera att om man f&ouml;rs&ouml;ker flytta en fil till en plats d&auml;r det redan finns en fil med samma namn s&aring; kommer kommandot mv skriva &ouml;ver filen som finns i destinationen. Man f&aring;r bekr&auml;fta eller makulera kommandot genom att svara p&aring; en fr&aring;ga n&auml;r det &auml;r DOS men i Unix/Mac OS X kommer att filen skrivas &ouml;ver utan n&aring;gra varningar. T ex om man k&ouml;r f&ouml;ljande kommando:</p>+
- +
-<div class="codebox-divided" style="width: 600px;"><div class="codecolumn1" style="_width: 180px;"><div class="title">Unix/Mac OS X</div><pre>&gt;mv test/prog.py test/Katalog1/+
-&gt;</pre></div><div class="codecolumn2"><div class="title">DOS</div><pre>C:\sommarkurs&gt;move test\&gt;Prog.py test\Katalog1\+
-Overwrite C:\sommarkurs\test\Katalog1\Prog.py? (Yes/No/All): Yes+
-C:\sommarkurs&gt;</pre></div></div>+
- +
-[[Bild:795537.jpg]]+
-<p>D&aring; kommer filen <span class="code">test/Katalog1/prog.py</span> ers&auml;ttas med filen <span class="code">test/prog.py</span></p>+* F&ouml;rflyttning i filtr&auml;det.
 +* Kopiering av filer.
 +* Radering av filer.
-<p>Man kan ocks&aring; anv&auml;nda kommandot <span class="code">mv</span> f&ouml;r att byta namn p&aring; en fil. Anta att man vill byta namn p&aring; filen <span class="code">prog.py</span> som finns under katalogen <span class="code">test/Katalog1</span> till <span class="code">prog3.py</span>, f&ouml;ljande kommando g&ouml;r detta om aktuella katalogen &auml;r <span class="code">sommarkurs</span>:</p>+Allt detta kan man också göra i ett pythonprogram. I den här kursen begränsar vi oss dock till att visa hur man kan skapa textfiler och läsa och skriva i sådana filer.
-<div class="codebox-divided" style="width: 700px;"><div class="codecolumn1"><div class="title">Unix/Mac OS X</div><pre>&gt;mv test/Katalog1/prog.py test/Katalog1/prog3.py 
-&gt; </pre></div><div class="codecolumn2"><div class="title">DOS</div><pre>C:\sommarkurs&gt;move test/Katalog1/prog.py test/Katalog1/prog3.py  
-C:\sommarkurs&gt;</pre></div></div> 
-[[Bild:795538.jpg]]+==Textfiler i Python==
-<span style="color:red">[FRÅGOR]</span>+Antag att det redan finns en fil som heter <code>kompisar.txt</code> med följande innehåll:
-==Skapa kataloger==+<pre>Anna Bok
 +Caesar Davidson
 +Erling Franson</pre>
-<p>Om man vill skapa nya kataloger kan man anv&auml;nda sig av kommandot <span class="code">mkdir</span> (som st&aring;r f&ouml;r make directory, skapa katalog).</p>+Här är ett pythonprogram som läser innehållet i filen, rad för rad, och lagrar strängarna i en lista med namnet <code>friends</code>.
-<p>Anta att aktuella katalogen &auml;r sommarkurs och man vill skapa en katalog med namnet <span class="code">lab1</span> i katalogen programkod, f&ouml;ljande kommando g&ouml;r detta:</p>+<pre>friends = []
 +file = open('kompisar.txt', 'rU')
 +for line in file:
 + friends.append(line)
 +file.close()
 +</pre>
-<div class="codebox-divided"><div class="codecolumn1"><div class="title">Unix/Mac OS X</div><pre>&gt;mkdir programkod/lab1+Funktionen <code>open</code> öppnar filen men namnet <code>kompisar.txt</code> för läsning (<code>r</code> betyder "read", <code>U</code> betyder "Universal newline mode" och är en mekanism i Python som översätter de olika tecknen för radslut som förekommer i olika operativsystem till standardtecknet <code>\n</code>). Med hjälp av en <code>for</code>-sats går vi igenom filen rad för rad.
-&gt;</pre></div><div class="codecolumn2"><div class="title">DOS</div><pre>C:\sommarkurs&gt; mkdir programkod\lab1+När man är klar med filen så bör man stänga den med hjälp av funktionen <code>close</code>. Så länge en fil är öppen så har ditt program ensamrätt på den här filen och andra processor på datorn kan inte komma åt den. Om man glömmer att göra <code>close()</code> så sker det automatiskt när programmet avslutas.
-C:\sommarkurs&gt;</pre></div></div>+
-<p>Hade aktuella katalogen varit <span class="code">programkod</span> s&aring; hade f&ouml;ljande kommando skapat katalogen <span class="code">lab1</span>:</p>+Om man vill skapa en helt ny fil med namnet <code>kollegor.txt</code> så kan man göra så här. Om det redan finns en fil med namnet <code>kollegor.txt</code> så skriver man istället över innehållet i den filen. '''Var försiktig.'''
-<div class="codebox-divided"><div class="codecolumn1"><div class="title">Unix/Mac OS X</div><pre>&gt;mkdir lab1+<pre>file = open('kollegor.txt', 'w')
-&gt;</pre></div><div class="codecolumn2"><div class="title">DOS</div><pre>C:\sommarkurs\programkod&gt;mkdir lab1+file.write('Gustav Hast\n')
-C:\sommarkurs\programkod&gt;</pre></div></div>+file.write('Ingemar Johansson\n')
 +file.close()</pre>
-<p>s&aring; h&auml;r ser filstrukturen ut efter skapandet av katalogen lab1:</p>+I det här fallet så ger man parametern <code>'w'</code> (som betyder 'write') till <code>open</code>-funktionen. Observera att man själv måste skriva ut radslutstecken om man vill att filen ska innehålla flera rader. Tecknet <code>\n</code> är ett specialtecken som används i strängar för att markera ett radslut.
-[[Bild:795539.jpg]] 
-==Prov==+==Test==
-TODO+Dags för test nummer 5. Testet hittar du som vanligt under rubriken Examination
 +på kursens förstasida. Även detta test rättas automatiskt och du har möjlighet
 +att göra om testet flera gånger om du inte lyckas på första försöket.

Nuvarande version

Innehåll

[redigera] Filer

Information som man vill ha kvar på en dator sparas på fil. Det kan t ex röra sig om ett brev som har skapats med hjälp av ett ordbehandlingsprogram, en bild som har skapats av ett ritningsprogram eller en kamera osv. Filer sparas på långtidsminnen som t ex datorns skivminne (hårddisken). När man sparat en fil på hårddisken kommer filen att finnas kvar där även när man har startat om datorn eller t ex när det blir strömavbrott. Därför är det bra att spara den programkod man skriver på en fil för senare bearbetning. Dels för att det sällan blir rätt första gången, dels för att när man väl provkört kommer man på fler saker man önskar av programmet.

Filer kan delas upp i tre sorter:

  • Vanliga filer: som innehåller data (t ex text eller bildinformation).
  • Katalog eller mapp: som innehåller andra filer.
  • Länkar, genvägar eller alias: En fil som refererar till en fil.

Kataloger används för att organisera filer och program. Kataloger kan innehålla andra kataloger. T ex kan man spara alla filer som har skapats i samband med sommarkursen under katalogen ”sommarkurs”. Strukturen kallas i datorsammanhang ofta för ett filträd.

Länkar används t ex för att man ska kunna hitta samma fil på flera ställen. En bildfil kan ta stor plats och en populär bild kan man vilja ha med på många ställen. För att slippa kopiera bilden lägger man då istället länkar till den. Länkarna tar nästan ingen plats alls.


[redigera] Filhantering

På nästan alla datorer finns det ett grafiskt användargränssnitt (det du ser på skärmen) som kan användas för att organisera filer med hjälp av musen, kortkommandon eller ett filhanteringsprogram.

Filer, kataloger och länkar har då grafiska symboler som kallas för ikoner. Följande bilder visar hur olika ikoner ser ut i ett Mac/OS X operativsystem:

Bild:800176.jpg Bild:800177.jpg Bild:800178.jpg

I programmeringssammanhang är det väldigt vanligt att använda tangentbordskommandon för filhanteringen, t ex för att utföra:

  • Förflyttning i filträdet.
  • Kopiering av filer.
  • Radering av filer.

Allt detta kan man också göra i ett pythonprogram. I den här kursen begränsar vi oss dock till att visa hur man kan skapa textfiler och läsa och skriva i sådana filer.


[redigera] Textfiler i Python

Antag att det redan finns en fil som heter kompisar.txt med följande innehåll:

Anna Bok
Caesar Davidson
Erling Franson

Här är ett pythonprogram som läser innehållet i filen, rad för rad, och lagrar strängarna i en lista med namnet friends.

friends = []
file = open('kompisar.txt', 'rU')
for line in file:
    friends.append(line)
file.close()

Funktionen open öppnar filen men namnet kompisar.txt för läsning (r betyder "read", U betyder "Universal newline mode" och är en mekanism i Python som översätter de olika tecknen för radslut som förekommer i olika operativsystem till standardtecknet \n). Med hjälp av en for-sats går vi igenom filen rad för rad. När man är klar med filen så bör man stänga den med hjälp av funktionen close. Så länge en fil är öppen så har ditt program ensamrätt på den här filen och andra processor på datorn kan inte komma åt den. Om man glömmer att göra close() så sker det automatiskt när programmet avslutas.

Om man vill skapa en helt ny fil med namnet kollegor.txt så kan man göra så här. Om det redan finns en fil med namnet kollegor.txt så skriver man istället över innehållet i den filen. Var försiktig.

file = open('kollegor.txt', 'w')
file.write('Gustav Hast\n')
file.write('Ingemar Johansson\n')
file.close()

I det här fallet så ger man parametern 'w' (som betyder 'write') till open-funktionen. Observera att man själv måste skriva ut radslutstecken om man vill att filen ska innehålla flera rader. Tecknet \n är ett specialtecken som används i strängar för att markera ett radslut.


[redigera] Test

Dags för test nummer 5. Testet hittar du som vanligt under rubriken Examination på kursens förstasida. Även detta test rättas automatiskt och du har möjlighet att göra om testet flera gånger om du inte lyckas på första försöket.

Personliga verktyg