1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3833],{63833:t=>{t.exports=JSON.parse('{"title":"File Handling","translatedTitle":"ΧειÏιÏμÏÏ ÎÏÏείÏν","lessons":[{"slug":"opening-and-closing-files","title":"6.1 Îνοιγμα και ÎλείÏιμο ÎÏÏείÏν: Î ÎÏÎºÎ»Î¿Ï ÎÏÎ®Ï ÎµÎ½ÏÏ Î ÏÏοÏ
","description":"Î ÏειÏιÏμÏÏ Î±ÏÏείÏν είναι η γÎÏÏ
Ïα ÏÏÎ¿Ï Ïη μÏνιμη αÏοθήκεÏ
Ïη, εÏιÏÏÎÏονÏÎ±Ï ÏÏα ÏÏογÏάμμαÏα να εÏιβιÏνοÏ
ν μεÏά Ïην εκÏÎλεÏη.","course":"python","content":[{"type":"p","text":"Îνα ÏÏÏγÏαμμα, καÏά Ïην εκÏÎλεÏή ÏοÏ
, ζει εξ ολοκλήÏοÏ
ÏÏην ÏÏηÏική μνήμη (RAM) ÏοÏ
Ï
ÏολογιÏÏή. Îλα Ïα ανÏικείμενα, οι μεÏαβληÏÎÏ ÎºÎ±Î¹ οι δομÎÏ Î´ÎµÎ´Î¿Î¼ÎνÏν ÏοÏ
δημιοÏ
ÏγοÏμε ÏαÏοÏ
ν να Ï
ÏάÏÏοÏ
ν μÏÎ»Î¹Ï Ïο ÏÏÏγÏαμμα ÏεÏμαÏιÏÏεί. Î <strong>ΧειÏιÏμÏÏ ÎÏÏείÏν (File I/O - Input/Output)</strong> είναι ο θεμελιÏÎ´Î·Ï Î¼Î·ÏανιÏμÏÏ ÏοÏ
εÏιÏÏÎÏει ÏÏα ÏÏογÏάμμαÏά Î¼Î±Ï Î½Î± εÏικοινÏνοÏν με Ïο ÏÏÏÏημα αÏÏείÏν ÏοÏ
λειÏοÏ
ÏÎ³Î¹ÎºÎ¿Ï ÏÏ
ÏÏήμαÏοÏ, ÏαÏÎÏονÏÎ±Ï <strong>μονιμÏÏηÏα (persistence)</strong>. Îίναι η γÎÏÏ
Ïα ÏοÏ
εÏιÏÏÎÏει ÏÏα δεδομÎνα να εÏιβιÏνοÏ
ν μεÏά Ïην εκÏÎλεÏη, να διαβάζονÏαι αÏÏ Î¬Î»Î»ÎµÏ ÎµÏαÏμογÎÏ ÎºÎ±Î¹ να αÏοθηκεÏονÏαι για μελλονÏική ÏÏήÏη. ÎÏ
Ïή η διαδικαÏία είναι, ÏÏην οÏ
Ïία, μια διαÏειÏιζÏμενη \\\\\\"ÏÏ
νομιλία\\\\\\" με Ïο λειÏοÏ
ÏÎ³Î¹ÎºÏ ÏÏÏÏημα, ÏÏοÏ
Ïο ÏÏÏγÏαμμά Î¼Î±Ï Î¶Î·Ïά ÏÏÏÏβαÏη Ïε Îναν εξÏÏεÏÎ¹ÎºÏ ÏÏÏο (Îνα αÏÏείο), εκÏελεί λειÏοÏ
ÏÎ³Î¯ÎµÏ Î±Î½Î¬Î³Î½ÏÏÎ·Ï Î® εγγÏαÏήÏ, και ÏÎλοÏ, αÏελεÏ
θεÏÏνει αÏ
ÏÏν Ïον ÏÏÏο."},{"type":"h3","text":"6.1.1 ÎεÏÏία"},{"type":"p","text":"<strong>E/S ÎÏÏείÏν: Î Î Ïλη ÏÏÎ¿Ï Ïα ÎÏνιμα ÎεδομÎνα</strong>"},{"type":"p","text":"ΣÏον κÏÏμο ÏοÏ
ÏÏογÏαμμαÏιÏμοÏ, Ïα δεδομÎνα ÏοÏ
ÏειÏιζÏμαÏÏε ÏÏ
Ïνά ÏÏÎÏει να εÏιβιÏνοÏ
ν ÏÎÏαν ÏÎ·Ï ÎµÎºÏÎλεÏÎ·Ï ÏοÏ
ÏÏογÏάμμαÏοÏ. ΦανÏαÏÏείÏε Îναν εÏεξεÏγαÏÏή κειμÎνοÏ
. Îν Ïο ÎγγÏαÏÏ ÏÎ±Ï ÎµÎ¾Î±ÏανιζÏÏαν κάθε ÏοÏά ÏοÏ
κλείναÏε Ïην εÏαÏμογή, θα ήÏαν άÏÏηÏÏο. ÎÎ´Ï Î±ÎºÏιβÏÏ Î¿ <strong>ΧειÏιÏμÏÏ ÎÏÏείÏν (E/S - ÎίÏοδοÏ/ÎξοδοÏ)</strong> καθίÏÏαÏαι αÏαÏαίÏηÏοÏ. Τα ÏÏογÏάμμαÏά Î¼Î±Ï Î»ÎµÎ¹ÏοÏ
ÏγοÏν μÎÏα ÏÏην <strong>ÏÏηÏική μνήμη (RAM)</strong> ÏοÏ
Ï
ÏολογιÏÏή, Îναν ÏÏοÏÏÏÎ¹Î½Ï ÏÏÏο εÏγαÏÎ¯Î±Ï ÏÏοÏ
Ïα δεδομÎνα αÏοθηκεÏονÏαι μÏνο για ÏÏο διάÏÏημα ÏαÏÎÏεÏαι ÏεÏμα ή εκÏελείÏαι Ïο ÏÏÏγÏαμμα. ÎÏÎ»Î¹Ï Ïο ÏÏÏγÏαμμα ÏεÏμαÏιÏÏεί, ÏÎ»ÎµÏ Î¿Î¹ μεÏαβληÏÎÏ, Ïα ανÏικείμενα και οι δομÎÏ Î´ÎµÎ´Î¿Î¼ÎνÏν ÏοÏ
διαγÏάÏονÏαι αÏÏ Ïη RAM."},{"type":"p","text":"Î <strong>ÎονιμÏÏηÏα (Persistence)</strong> είναι η ικανÏÏηÏα ÏÏν δεδομÎνÏν να εÏιβιÏνοÏ
ν ÏÎÏαν ÏÎ·Ï ÎµÎºÏÎλεÏÎ·Ï ÏοÏ
ÏÏογÏάμμαÏÎ¿Ï ÏοÏ
Ïα δημιοÏÏγηÏε. Î ÏειÏιÏμÏÏ Î±ÏÏείÏν E/S είναι ο ÏÏÏÏαÏÏικÏÏ Î¼Î·ÏανιÏμÏÏ ÏοÏ
ÏÏοÏÏÎÏει η Python για Ïην εÏίÏεÏ
ξη αÏ
ÏÎ®Ï ÏÎ·Ï Î¼Î¿Î½Î¹Î¼ÏÏηÏαÏ. ÎÏιÏÏÎÏει ÏÏα ÏÏογÏάμμαÏά Î¼Î±Ï Î½Î± αλληλεÏιδÏοÏν με Ïο <strong>ÏÏÏÏημα αÏÏείÏν</strong> ÏοÏ
Ï
ÏολογιÏÏή, εÏιÏÏÎÏονÏÎ±Ï Ïην αÏοθήκεÏ
Ïη και ανάκÏηÏη δεδομÎÎ
1½Ïν Ïε μη ÏÏηÏικÎÏ ÏÏ
ÏκεÏ
ÎÏ Î±ÏοθήκεÏ
ÏÎ·Ï ÏÏÏÏ ÏκληÏοί δίÏκοι, SSD ή USB sticks. ÎÏ
Ïή η αλληλεÏίδÏαÏη δεν είναι μια άμεÏη ÏειÏαγÏγηÏη ÏοÏ
Ï
Î»Î¹ÎºÎ¿Ï Î±ÏοθήκεÏ
ÏηÏ, αλλά μάλλον μια \xabÏÏ
νομιλία\xbb ÏοÏ
διαÏειÏίζεÏαι Ïο λειÏοÏ
ÏÎ³Î¹ÎºÏ ÏÏÏÏημα, Ïο οÏοίο ÏαÏÎÏει Îναν αÏÏαλή και δομημÎνο ÏÏÏÏο για ÏÎ¹Ï ÎµÏαÏμογÎÏ Î½Î± ÎÏοÏ
ν ÏÏÏÏβαÏη ÏÏα αÏÏεία."},{"type":"p","text":"<strong>ΠΣÏ
νάÏÏηÏη `open()` και Ïο ÎνÏικείμενο ΧειÏιÏÎ¼Î¿Ï ÎÏÏείοÏ
</strong>"},{"type":"p","text":"Το Ïαξίδι ÏÎ·Ï Î±Î»Î»Î·Î»ÎµÏίδÏαÏÎ·Ï Î¼Îµ Îνα αÏÏείο ÏÏην Python ξεκινά με Ïην ενÏÏμαÏÏμÎνη ÏÏ
νάÏÏηÏη <code>open()</code>. ΠθεμελιÏÎ´Î·Ï ÏκοÏÏÏ ÏÎ·Ï ÎµÎ¯Î½Î±Î¹ να δημιοÏ
ÏγήÏει μια ÏÏνδεÏη μεÏÎ±Î¾Ï ÏοÏ
ÏÏογÏάμμαÏÏÏ ÏÎ±Ï Python και ενÏÏ Î±ÏÏείοÏ
ÏÏο ÏÏÏÏημα αÏÏείÏν. Î ÏÏνÏαξη είναι ÏÏ
νήθÏÏ <code>open(file, mode=\'r\', encoding=None)</code>, ÏÏοÏ
:<ul><li><code>file</code> είναι μια ÏÏ
μβολοÏειÏά ÏοÏ
ανÏιÏÏοÏÏÏεÏει Ïη διαδÏομή ÏÏÎ¿Ï Ïο αÏÏείο.</li><li><code>mode</code> καθοÏίζει ÏÏÏ ÏκοÏεÏεÏε να αλληλεÏιδÏάÏεÏε με Ïο αÏÏείο (Ï.Ï., ανάγνÏÏη, εγγÏαÏή, ÏÏοÏάÏÏηÏη).</li><li><code>encoding</code> (ειδικά Ïε λειÏοÏ
Ïγία κειμÎνοÏ
) οÏίζει ÏÏÏ Î¿Î¹ ÏαÏακÏήÏÎµÏ Î¼ÎµÏαÏÏάζονÏαι Ïε bytes και ανÏίÏÏÏοÏα.</li></ul>"},{"type":"p","text":"Îίναι κÏίÏιμο να καÏανοήÏοÏ
με ÏÏι η <code>open()</code> δεν εÏιÏÏÏÎÏει Ïο ÏÏαγμαÏÎ¹ÎºÏ ÏεÏιεÏÏμενο ÏοÏ
αÏÏείοÏ
. ÎνÏ\' αÏ
ÏοÏ, εÏιÏÏÏÎÏει Îνα <strong>ανÏικείμενο ÏειÏιÏÎ¼Î¿Ï Î±ÏÏείοÏ
</strong> (ÏÏ
Ïνά αναÏÎÏεÏαι ÏÏ Î±Î½Ïικείμενο αÏÏείοÏ
ή Ïοή αÏÏείοÏ
). ÎÏ
ÏÏ Ïο ανÏικείμενο είναι ÎÎ
1½Î±Ï <strong>ανÏιÏÏÏÏÏÏÎ¿Ï (proxy)</strong> ή ÎÎ½Î±Ï <strong>αγÏγÏÏ</strong>, ÏοÏ
ανÏιÏÏοÏÏÏεÏει Ïην ανοιÏÏή ÏÏνδεÏη με Ïο αÏÏείο. Îίναι μια αÏαίÏεÏη ÏοÏ
ÏαÏÎÏεÏαι αÏÏ Ïο λειÏοÏ
ÏÎ³Î¹ÎºÏ ÏÏÏÏημα και εÏιÏÏÎÏει ÏÏο ÏÏÏγÏαμμά ÏÎ±Ï Î½Î± εκÏελεί λειÏοÏ
ÏÎ³Î¯ÎµÏ ÏÏÏÏ Î±Î½Î¬Î³Î½ÏÏη ή εγγÏαÏή ÏÏÏÎ¯Ï Î½Î± ÏÏειάζεÏαι να καÏανοεί ÏÎ¹Ï Î»ÎµÏÏομÎÏÎµÎ¹ÎµÏ ÏÎ±Î¼Î·Î»Î¿Ï ÎµÏιÏÎδοÏ
για Ïο ÏÏÏ Î±ÏοθηκεÏεÏαι ÏÏ
Ïικά Ïο αÏÏείο. Το ανÏικείμενο ÏειÏιÏÎ¼Î¿Ï Î±ÏÏείοÏ
διαÏηÏεί κÏίÏÎ¹Î¼ÎµÏ <strong>ÏληÏοÏοÏÎ¯ÎµÏ ÎºÎ±ÏάÏÏαÏηÏ</strong>, ÏÏÏÏ Ïην ÏÏÎÏοÏ
Ïα <strong>θÎÏη ÏοÏ
δÏομÎα</strong> (ÏÏοÏ
θα ÏÏαγμαÏοÏοιηθεί η εÏÏμενη λειÏοÏ
Ïγία ανάγνÏÏÎ·Ï Î® εγγÏαÏήÏ) και Ïον <strong>ÏÏÏÏο λειÏοÏ
ÏγίαÏ</strong> με Ïον οÏοίο ανοίÏÏηκε Ïο αÏÏείο."},{"type":"p","text":"<strong>ÎειÏοÏ
ÏÎ³Î¯ÎµÏ ÎÏÏείοÏ
: ÎηλÏνονÏÎ±Ï Ïην Î ÏÏθεÏή ÏαÏ</strong>"},{"type":"p","text":"Î ÏαÏάμεÏÏÎ¿Ï `mode` ÏÏη ÏÏ
νάÏÏηÏη `open()` είναι μια ιÏÏÏ
Ïή δηλÏÏική δήλÏÏη. ÎÎει ÏÏο λειÏοÏ
ÏÎ³Î¹ÎºÏ ÏÏÏÏημα ÏÎ¹Ï ÏÏοθÎÏÎµÎ¹Ï ÏÎ±Ï Î³Î¹Î± Ïην ÏÏÏÏβαÏη ÏÏο αÏÏείο, γεγονÏÏ ÏοÏ
εÏηÏεάζει Ïον ÏÏÏÏο με Ïον οÏοίο Ïο αÏÏείο ανÏιμεÏÏÏίζεÏαι και ÏÎ¿Î¹ÎµÏ Î»ÎµÎ¹ÏοÏ
ÏÎ³Î¯ÎµÏ ÎµÏιÏÏÎÏονÏαι. ΠκαÏανÏηÏη αÏ
ÏÏν ÏÏν λειÏοÏ
ÏγιÏν είναι αÏαÏαίÏηÏη για Ïην αÏοÏÏ
γή ακοÏÏÎ¹Î±Ï Î±ÏÏÎ»ÎµÎ¹Î±Ï Î´ÎµÎ´Î¿Î¼ÎνÏν και Ïη διαÏÏάλιÏη ÏÎ·Ï ÏÏÏÏÎ®Ï Î´Î¹Î±ÏείÏιÏÎ·Ï ÏÏν αÏÏείÏν."},{"type":"p","text":"<ul><li><strong>`\'r\'` (ÎειÏοÏ
Ïγία ÎνάγνÏÏηÏ):</strong> ÎÏ
Ïή είναι η <strong>ÏÏοεÏιλεγμÎνη λειÏοÏ
Ïγία</strong>. Îνοίγει Ïο αÏÏείο μÏνο για ανάγνÏÏη, ÏÏάγμα ÏοÏ
Ïημαίνει ÏÏι μÏοÏείÏε να ανακÏήÏεÏε δεδομÎνα αÏÏ Ïο αÏÏείο αλλά ÏÏι να Ïο ÏÏοÏοÏοιήÏεÏε. ΠδÏομÎÎ±Ï ÏοÏ
αÏÏείοÏ
ÏοÏοθεÏείÏαι ÏÏην αÏÏή ÏοÏ
αÏÏείοÏ
. Îάν Ïο καθοÏιÏμÎνο αÏÏείο δεν Ï
ÏάÏÏει, η Python θα ÏÏοκαλÎÏει Îνα `FileNotFoundError`.</li><li><strong>`\'w\'` (ÎειÏοÏ
Ïγία ÎγγÏαÏήÏ):</strong> ÎÏ
Ïή η λειÏοÏ
Ïγία ανοίγει Ïο αÏÏείο μÏνο για εγγÏαÏή. Îάν Ïο αÏÏείο Ï
ÏάÏÏει ήδη, Ïο ÏεÏιεÏÏÎ¼ÎµÎ½Ï ÏοÏ
<strong>αμεÏάκληÏα ÏεÏικÏÏÏεÏαι (διαγÏάÏεÏαι)</strong>, ξεκινÏνÏÎ±Ï Î¿Ï
ÏιαÏÏικά με Îνα ÎºÎµÎ½Ï Î±ÏÏείο. Îάν Ïο αÏÏείο δεν Ï
ÏάÏÏει, δημιοÏ
ÏγείÏαι Îνα νÎο. ΠδÏομÎÎ±Ï ÏοÏοθεÏείÏαι ÏÏην αÏÏή. <strong>ΧÏηÏιμοÏοιήÏÏε Ïο με μεγάλη ÏÏοÏοÏή!</strong></li><li><strong>`\'a\'` (ÎειÏοÏ
Ïγία Î ÏοÏάÏÏηÏηÏ):</strong> ÎÏ
Ïή η λειÏοÏ
Ïγία ανοίγει Ïο αÏÏείο για εγγÏαÏή, αλλά με μια κÏίÏιμη διαÏοÏά: οÏοιαδήÏοÏε νÎα δεδομÎνα γÏάÏονÏαι θα ÏÏοÏÏεθοÏν ÏÏο <strong>ÏÎÎ»Î¿Ï ÏοÏ
αÏÏείοÏ
</strong>, διαÏηÏÏνÏÎ±Ï Ïο Ï
ÏάÏÏον ÏεÏιεÏÏμενο. Îάν Ïο αÏÏείο δεν Ï
ÏάÏÏει, θα δημιοÏ
Ïγηθεί. ΠδÏομÎÎ±Ï ÏοÏοθεÏείÏαι αÏ
ÏÏμαÏα ÏÏο ÏÎÎ»Î¿Ï ÏοÏ
αÏÏείοÏ
καÏά Ïο άνοιγμα.</li></ul>"},{"type":"p","text":"<strong>ΤÏοÏοÏοιηÏÎ®Ï `\'+\'` (ÎνάγνÏÏη και ÎγγÏαÏή):</strong> Î ÏοÏθÎÏονÏÎ±Ï `\'+\'` Ïε οÏοιαδήÏοÏε αÏÏ ÏÎ¹Ï ÎºÏÏÎ¹ÎµÏ Î»ÎµÎ¹ÏοÏ
ÏÎ³Î¯ÎµÏ (Ï.Ï., `\'r+\'`, `\'w+\'`, `\'a+\'`), Ï
ÏοδεικνÏεÏε ÏÏι Ïο αÏÏείο ÏÏÎÏει να ανοίξει για <strong>ανάγνÏÏη και εγγÏαÏή</strong>.<ul><li>`\'r+\'`: Îνοίγει Îνα Ï
ÏάÏÏον αÏÏείο ÏÏÏο για ανάγνÏÏη ÏÏο και για εγγÏαÏή. ΠδÏομÎÎ±Ï Î¾ÎµÎºÎ¹Î½Î¬ αÏÏ Ïην αÏÏή. Îα ÏÏοκαλÎÏει ÎÎ
1½Î± `FileNotFoundError` εάν Ïο αÏÏείο δεν Ï
ÏάÏÏει.</li><li>`\'w+\'`: ÎημιοÏ
Ïγεί Îνα ÎºÎµÎ½Ï Î±ÏÏείο ÏÏÏο για ανάγνÏÏη ÏÏο και για εγγÏαÏή. Îάν Ïο αÏÏείο Ï
ÏάÏÏει, ÏεÏικÏÏÏεÏαι ÏÏÏÏα.</li><li>`\'a+\'`: Îνοίγει Ïο αÏÏείο ÏÏÏο για ανάγνÏÏη ÏÏο και για ÏÏοÏάÏÏηÏη. ΠδÏομÎÎ±Ï Î¾ÎµÎºÎ¹Î½Î¬ αÏÏ Ïην αÏÏή για ανάγνÏÏη, αλλά ÏÎ»ÎµÏ Î¿Î¹ εγγÏαÏÎÏ ÏÏαγμαÏοÏοιοÏνÏαι ÏÏο ÏÎÎ»Î¿Ï ÏοÏ
αÏÏείοÏ
.</li></ul>"},{"type":"p","text":"<strong>ÎειÏοÏ
ÏÎ³Î¯ÎµÏ `\'b\'` (ÎÏ
αδική) vs. `\'t\'` (ÎειμÎνοÏ
):</strong> ÎÏ
Ïή η διάκÏιÏη καθοÏίζει Ïον ÏÏÏÏο ÏειÏιÏÎ¼Î¿Ï ÏÏν δεδομÎνÏν.<ul><li><strong>ÎειÏοÏ
Ïγία ÎειμÎνοÏ
(ÏÏοεÏιλογή, Ï
ÏονοείÏαι αÏÏ Ïα \'r\', \'w\', \'a\'):</strong> Σε αÏ
Ïή Ïη λειÏοÏ
Ïγία, η Python αναμÎνει να λειÏοÏ
Ïγεί με <strong>ÏÏ
μβολοÏειÏÎÏ</strong> (ακολοÏ
Î¸Î¯ÎµÏ ÏαÏακÏήÏÏν Unicode). ÎαÏά Ïην εγγÏαÏή, αÏ
ÏÎÏ Î¿Î¹ ÏÏ
μβολοÏειÏÎÏ <strong>κÏδικοÏοιοÏνÏαι</strong> Ïε ακαÏÎÏγαÏÏα bytes ÏÏηÏιμοÏοιÏνÏÎ±Ï Î¼Î¹Î± καθοÏιÏμÎνη κÏδικοÏοίηÏη ÏαÏακÏήÏÏν (Ï.Ï., UTF-8, ASCII). ÎαÏά Ïην ανάγνÏÏη, Ïα bytes <strong>αÏοκÏδικοÏοιοÏνÏαι</strong> ξανά Ïε ÏÏ
μβολοÏειÏÎÏ. ÎÏ
Ïή η αÏ
ÏÏμαÏη κÏδικοÏοίηÏη/αÏοκÏδικοÏοίηÏη είναι βολική για αÏÏεία ÏοÏ
είναι αναγνÏÏιμα αÏÏ Ïον άνθÏÏÏο. Î ÏαÏάμεÏÏÎ¿Ï `encoding` είναι κÏίÏιμη εδÏ.</li><li><strong>ÎÏ
αδική ÎειÏοÏ
Ïγία (Ï.Ï., `\'rb\'`, `\'wb\'`, `\'ab\'`):</strong> Î ÏοÏθÎÏονÏÎ±Ï `\'b\'` ÏÏη λειÏοÏ
Ïγία, λÎÏε ÏÏην Python να ανÏιμεÏÏÏίζει Ïο αÏÏείο ÏÏ Î¼Î¹Î± Ïοή <strong>ακαÏÎÏγαÏÏÏν bytes</strong>. Îεν ÏÏαγμαÏοÏοιείÏαι καμία κÏδικοÏοίηÏη ή αÏοκÏδικοÏοίηÏη. ÎÏ
Ïή η λειÏοÏ
Ïγία είναι <strong>αÏολÏÏÏÏ Î±ÏαÏαίÏηÏη</strong> για Ïον ÏειÏιÏÎ¼Ï Î±ÏÏείÏν ÏοÏ
δεν είναι κείμενο, ÏÏÏÏ ÎµÎ¹ÎºÏÎ½ÎµÏ (JPEG, PNG), ήÏÎ¿Ï (MP3), βίνÏεο (MP4), εκÏελÎÏιμα αÏÏεία, ή οÏοιαδήÏοÏε δεδομÎνα ÏοÏ
δεν ανÏιÏÏοÏÏÏεÏονÏαι ÏÏ
Ïικά ÏÏ ÎºÎµÎ¯Î¼ÎµÎ½Î¿ αναγνÏÏιμο αÏÏ Ïον άνθÏÏÏο. ÎÏαν διαβάζεÏε Ïε δÏ
αδική λειÏοÏ
Ïγία, λαμβάνεÏε ανÏικείμενα `bytes`, και ÏÏαν γÏάÏεÏε, ÏÏÎÏει να ÏαÏÎÏεÏε ανÏικείμενα `bytes`.</li></ul>"},{"type":"p","text":"<strong>Î ÎÏιÏιμÏÏηÏα ÏÎ·Ï `close()`</strong>"},{"type":"p","text":"ÎÏÎ¿Ï Î¿Î»Î¿ÎºÎ»Î·ÏÏÏεÏε Ïην αλληλεÏίδÏαÏη με Îνα αÏÏείο, είναι <strong>Ï
ÏοÏÏεÏÏικÏ</strong> να Ïο κλείÏεÏε ÏηÏά ÏÏηÏιμοÏοιÏνÏÎ±Ï Ïη μÎθοδο `.close()` ÏÏο ανÏικείμενο ÏειÏιÏÎ¼Î¿Ï Î±ÏÏείοÏ
. Î ÏαÏάλειÏη κλειÏίμαÏÎ¿Ï Î±ÏÏείÏν μÏοÏεί να οδηγήÏει Ïε ÏοβαÏά ÏÏοβλήμαÏα:"},{"type":"p","text":"<ul><li><strong>ÎιαÏÏοÎÏ Î ÏÏÏν:</strong> ÎÏαν ανοίγεÏαι Îνα αÏÏείο, Ïο λειÏοÏ
ÏÎ³Î¹ÎºÏ ÏÏÏÏημα εκÏÏÏεί μια ειδική εÏÏÏεÏική δομή δεδομÎνÏν ÏοÏ
ονομάζεÏαι <strong>ÏεÏιγÏαÏÎÎ±Ï Î±ÏÏείοÏ
</strong> (ή file handle ÏÏα Windows) για Ïη διαÏείÏιÏη ÏÎ·Ï ÏÏνδεÏηÏ. Τα λειÏοÏ
Ïγικά ÏÏ
ÏÏήμαÏα ÎÏοÏ
ν Îνα ÏεÏεÏαÏμÎνο ÏÏιο ÏÏον αÏÎ¹Î¸Î¼Ï ÏÏν ÏεÏιγÏαÏÎÏν αÏÏείÏν ÏοÏ
μÏοÏεί να κÏαÏήÏει ανοιÏÏά μια μεμονÏμÎνη διαδικαÏία ÏαÏ
ÏÏÏÏονα. Îάν Ïο ÏÏÏγÏαμμά ÏÎ±Ï Î±Î½Î¿Î¯Î³ÎµÎ¹ ÏÏ
νεÏÏÏ Î±ÏÏεία ÏÏÏÎ¯Ï Î½Î± Ïα κλείνει, μÏοÏεί γÏήγοÏα να εξανÏλήÏει αÏ
ÏοÏÏ ÏοÏ
Ï ÏÏÏοÏ
Ï. ÎÏ
ÏÏ Î¼ÏοÏεί να οδηγήÏει ÏÏο να μην μÏοÏεί Ïο ÏÏÏγÏαμμά ÏÎ±Ï Î½Î± ανοίξει νÎα αÏÏεία, ή ÏειÏÏÏεÏα, να εμÏοδίÏει άÎ
1»Î»ÎµÏ εÏαÏμογÎÏ Î® ακÏμα και Ïο ίδιο Ïο λειÏοÏ
ÏÎ³Î¹ÎºÏ ÏÏÏÏημα αÏÏ Ïο να λειÏοÏ
ÏγήÏοÏ
ν ÏÏÏÏά.</li><li><strong>ÎÏÏλεια ÎεδομÎνÏν λÏÎ³Ï Buffering:</strong> Îια βελÏιÏÏοÏοίηÏη ÏÎ·Ï Î±ÏÏδοÏηÏ, οι λειÏοÏ
ÏÎ³Î¯ÎµÏ ÎµÎ³Î³ÏαÏÎ®Ï Ïε ÏÏγÏÏονα λειÏοÏ
Ïγικά ÏÏ
ÏÏήμαÏα και γλÏÏÏÎµÏ ÏÏογÏαμμαÏιÏÎ¼Î¿Ï (ÏÏ
μÏεÏιλαμβανομÎÎ½Î·Ï ÏÎ·Ï Python) ÏÏ
Ïνά <strong>αÏοθηκεÏονÏαι ÏÏοÏÏÏινά (buffered)</strong>. ÎÏ
ÏÏ Ïημαίνει ÏÏι ÏÏαν καλείÏε μια μÎθοδο `.write()`, Ïα δεδομÎνα δεν γÏάÏονÏαι αμÎÏÏÏ byte-ÏÏοÏ-byte ÏÏη ÏÏ
Ïική ÏÏ
ÏκεÏ
ή αÏοθήκεÏ
ÏηÏ. ÎνÏ\' αÏ
ÏοÏ, ÏÏ
λλÎγονÏαι ÏÏÏÏα Ïε Îναν ÏÏοÏÏÏÎ¹Î½Ï ÏÏÏο ÏÏη μνήμη (buffer). ΠμÎÎ¸Î¿Î´Î¿Ï `.close()` εκÏελεί μια κÏίÏιμη λειÏοÏ
Ïγία ÏοÏ
ονομάζεÏαι <strong>\xabÎκÏλÏ
Ïη ÏοÏ
buffer\xbb (flushing the buffer)</strong>, η οÏοία εξαναγκάζει Ïλα Ïα Ï
ÏÏλοιÏα δεδομÎνα ÏοÏ
buffer να γÏαÏÏοÏν αÏÏ Ïη μνήμη ÏÏο ÏÏαγμαÏÎ¹ÎºÏ Î±ÏÏείο ÏÏο δίÏκο. Îάν Îνα αÏÏείο δεν κλείÏει, οÏοιαδήÏοÏε δεδομÎνα εξακολοÏ
θοÏν να βÏίÏκονÏαι ÏÏο buffer ενδÎÏεÏαι να μην ÏÏάÏοÏ
ν ÏοÏÎ ÏÏο αÏÏείο, οδηγÏνÏÎ±Ï Ïε <strong>αÏελή ή καÏεÏÏÏαμμÎνα αÏÏεία</strong>. ÎÎ½Ï Î¿ ÏÏ
λλÎκÏÎ·Ï Î±ÏοÏÏιμμάÏÏν ÏÎ·Ï Python μÏοÏεί Ïελικά να κλείÏει Ïα αÏÏεία ÏÏÏÎ¯Ï Î±Î½Î±ÏοÏά, η εξάÏÏηÏη αÏÏ Î±Ï
ÏÏ ÎµÎ¯Î½Î±Î¹ κακή ÏÏακÏική και δεν ÏÏοÏÏÎÏει καμία εγγÏηÏη για Ïο ÏÏÏε θα εκÏλÏ
θοÏν οι buffers ή θα αÏελεÏ
θεÏÏθοÏν οι ÏÏÏοι.</li></ul>"},{"type":"h3","text":"6.1.2 ΠαÏάδειγμα"},{"type":"code","code":"# Πμη αÏÏαλήÏ, κλαÏική ÏÏοÏÎγγιÏη\\nfile_handle = open(\'my_first_file.txt\', \'w\', encoding=\'utf-8\') # \'utf-8\' είναι καλή ÏÏακÏική\\nfile_handle.write(\\"ÎÏ
Ïή είναι η ÏÏÏÏη γÏαмμή.\\\\n\\")\\nfile_handle.close() # ÎÏαÏαίÏηÏο κλείÏιμο\\n\\n# ÎνάγνÏÏη ÏοÏ
αÏÏείοÏ
\\nfile_handle = open(\'my_first_file.txt\', \'r\', encoding=\'utf-8\')\\ncontent = file_handle.read()\\nfile_handle.close()\\nprint(f\\"ΠεÏιεÏÏμενο ÏοÏ
αÏÏείοÏ
: {content}\\")"}]},{"slug":"with-open-statement","title":"6.2 Î ÎνÏολή \'with open()\'","description":"ΠενÏολή `with` είναι η ÏÏγÏÏονη, αÏÏÎ±Î»Î®Ï ÎºÎ±Î¹ \'Pythonic\' λÏÏη για Ïην αÏ
ÏομαÏοÏοιημÎνη διαÏείÏιÏη ÏÏÏÏν.","course":"python","content":[{"type":"p","text":"Î ÏειÏοκίνηÏη διαÏείÏιÏη ÏοÏ
open() και close() είναι εÏιÑÏÎµÐ¿Î®Ï Ïε ÏÏάλμαÏα, ειδικά αν ÏÏοκÏÏοÏ
ν εξαιÏÎÏÎµÎ¹Ï (exceptions) μεÏÎ±Î¾Ï ÏÏν δÏο κλήÏεÏν. ΠενÏολή with είναι η ÏÏγÏÏονη, αÏÏÎ±Î»Î®Ï ÎºÎ±Î¹ \\\\\\"Pythonic\\\\\\" λÏÏη."},{"type":"h3","text":"6.2.1 ÎεÏÏία"},{"type":"p","text":"<strong>Το Î ÏÏÏÏκολλο ÎιαÏείÏιÏÎ·Ï Î Î»Î±Î¹ÏίοÏ
(Context Management Protocol):</strong><br>ΠενÏολή `with` δεν είναι αÏλÏÏ ÏÏ
νÏακÏική εÏ
κολία\xb7 είναι η Ï
λοÏοίηÏη ενÏÏ Î¹ÏÏÏ
ÏÎ¿Ï ÏÏÏÏοκÏλλοÏ
. ÎÏοιοδήÏοÏε ανÏικείμενο ÏÏην Python Ï
λοÏοιεί δÏο ειδικÎÏ Î¼ÎµÎ¸ÏδοÏ
Ï, `__enter__()` και `__exit__()`, μÏοÏεί να ÏÏηÏιμοÏοιηθεί Ïε μια δήλÏÏη `with`. Îνα ÏÎÏοιο ανÏικείμενο ονομάζεÏαι διαÏειÏιÏÏÎ®Ï ÏλαιÏίοÏ
(context manager).<br><br><strong>ΠΡοή ÎκÏÎλεÏηÏ:</strong><br>ÎÏαν ο διεÏμηнÎÎ±Ï ÏÏ
νανÏά Ïη γÏαμμή `with expression as variable:`, εκÏελεί Ïα ÎµÎ¾Î®Ï Î²Î®Î¼Î±Ïα:<br>1. Îαλεί Ïη μÎθοδο `__enter__()` ÏοÏ
ανÏικειμÎνοÏ
ÏοÏ
ÏÏοκÏÏÏει αÏÏ Ïην `expression` (ÏÏην ÏεÏίÏÏÏÏή μαÏ, Ïο ανÏικείμενο ÏειÏιÏÎ¼Î¿Ï Î±ÏÏείοÏ
ÏοÏ
εÏιÏÏÏÎÏει η `open()`).<br>2. Î Ïιμή ÏοÏ
εÏιÏÏÏÎÏεÏαι αÏÏ Ïην `__enter__()` αναÏίθεÏαι ÏÏη `variable` (ÏÏην ÏεÏίÏÏÏÏή μαÏ, Ïο ίδιο Ïο file handle).<br>3. ÎκÏελείÏαι Ïο μÏλοκ κÏδικα ÏοÏ
βÏίÏκεÏαι μÎÏα ÏÏη δήλÏÏη `with`.<br>4. <strong>ÎγγÏ
ημÎνη ÎκÏÎλεÏη:</strong> ÎÏÎ»Î¹Ï Î· εκÏÎλεÏη εξÎλθει αÏÏ Ïο μÏλοκ `with`, για οÏοιονδήÏοÏε λÏγο (είÏε εÏειδή ολοκληÏÏθηκε ÏÏ
Ïιολογικά είÏε εÏειδή ÏÏοÎκÏ
Ïε Îνα ÏÏάλμα/εξαίÏεÏη), η Python εγγÏ
άÏαι ÏÏι θα καλÎÏει Ïη μÎθοδο `__exit__()` ÏοÏ
ανÏικειμÎνοÏ
. Îια Ïα ανÏικείμενα αÏÏείοÏ
, η μÎÎ¸Î¿Î´Î¿Ï `__exit__()` είÎ
1½Î±Î¹ αÏ
Ïή ÏοÏ
ÏεÏιÎÏει Ïη λογική για Ïο κλείÏιμο ÏοÏ
αÏÏείοÏ
(`file.close()`).<br><br><strong>ΣÏνδεÏη με Ïο ΠαÏάδειγμα RAII:</strong><br>ÎÏ
ÏÏ Ïο μοÏίβο είναι εννοιολογικά ÏαÏ
ÏÏÏημο με Ïην ÏεÏνική RAII (Resource Acquisition Is Initialization) ÏοÏ
είναι δημοÏÎ¹Î»Î®Ï Ïε γλÏÏÏÎµÏ ÏÏÏÏ Î· C++. ΠιδÎα είναι ÏÏι η αÏÏκÏηÏη ενÏÏ ÏÏÏοÏ
(άνοιγμα αÏÏείοÏ
) ÏÏ
νδÎεÏαι με Ïην αÏÏικοÏοίηÏη ενÏÏ Î±Î½ÏικειμÎνοÏ
, και η αÏελεÏ
θÎÏÏÏη ÏοÏ
ÏÏÏοÏ
(κλείÏιμο αÏÏείοÏ
) ÏÏ
νδÎεÏαι με Ïην καÏαÏÏÏοÏή ÏοÏ
ανÏικειμÎνοÏ
(ÎÎ¾Î¿Î´Î¿Ï Î±ÏÏ Ïο scope). ÎÏ
ÏÏ ÎºÎ±Î¸Î¹ÏÏά Ïη διαÏείÏιÏη ÏÏÏÏν αÏ
ÏÏμαÏη, αÏÏαλή και λιγÏÏεÏο εÏιÑÏεÏή Ïε ανθÏÏÏινο λάθοÏ."},{"type":"h3","text":"6.2.2 ΠαÏάδειγμα"},{"type":"code","code":"# Î ÏÏγÏÏονη, αÏÏÎ±Î»Î®Ï ÎºÎ±Î¹ ÏÏοÏεινÏμενη ÏÏοÏÎγγιÏη.\\n# Το αÏÏείο κλείνει αÏ
ÏÏμαÏα, ακÏμη και αν ÏÏοκÏÏει ÏÏάλμα.\\ntry:\\n with open(\'my_data.txt\', \'w\', encoding=\'utf-8\') as f:\\n f.write(\\"Î ÏÏÏη γÏαмμή δεδομÎνÏν.\\\\n\\")\\n f.write(\\"ÎεÏÏεÏη γÏαμμή δεδομÎνÏν.\\\\n\\")\\n # ÎÎ´Ï Î¸Î± μÏοÏοÏÏε να ÏÏ
μβεί Îνα ÏÏάλμα, Ï.Ï., 1 / 0\\n print(\\"ΠεγγÏαÏή ÏÏο \'my_data.txt\' ολοκληÏÏθηκε με εÏιÏÏ
Ïία.\\")\\n\\n with open(\'my_data.txt\', \'r\', encoding=\'utf-8\') as f:\\n print(\\"\\\\nÎνάγνÏÏη ÏεÏιεÏομÎνοÏ
:\\")\\n for line in f:\\n print(line.strip()) # .strip() για αÏαίÏεÏη ÏοÏ
ÏαÏακÏήÏα νÎÎ±Ï Î³ÏαμμήÏ\\n\\nexcept Exception as e:\\n print(f\\"Î ÏοÎκÏ
Ïε Îνα ÏÏάλμα: {e}\\")\\n # ÎκÏμα και Ïε αÏ
Ïή Ïην ÏεÏίÏÏÏÏη, Ïο \'with\' ÎÏει ήδη ÏÏονÏίÏει να κλείÏει Ïο αÏÏείο."}]},{"slug":"reading-methods","title":"6.3 ÎÎθοδοι ÎνάγνÏÏÎ·Ï ÎÏÏείÏν","description":"ÎξεÏάζοÏ
με ÏÎ¹Ï Î´Î¹Î¬ÏοÏÎµÏ Î¼ÎµÎ¸ÏδοÏ
Ï Î³Î¹Î± Ïην εξαγÏγή ÏεÏιεÏομÎνοÏ
αÏÏ Îνα αÏÏείο, δίνονÏÎ±Ï ÎμÏαÏη ÏÏην αÏοδοÏικÏÏηÏα ÏÎ·Ï Î¼Î½Î®Î¼Î·Ï.","course":"python","content":[{"type":"p","text":"ÎÏÎ¿Ï Îνα αÏÏείο ανοιÏÏεί Ïε λειÏοÏ
Ïγία ανάγνÏÏηÏ, ÎÏοÏ
με διάÏοÏÎµÏ Î¼ÎµÎ¸ÏδοÏ
Ï Î³Î¹Î± να εξάγοÏ
με Ïο ÏεÏιεÏÏÎ¼ÎµÎ½Ï ÏοÏ
."},{"type":"h3","text":"6.3.1 ÎεÏÏία"},{"type":"p","text":"<strong>ÎαÏανÏηÏη ÏÏν ÎεθÏδÏν ÎνάγνÏÏÎ·Ï ÎÏÏείÏν ÏÎ·Ï Python: Îια Îαθιά ÎοÏ
Ïιά</strong>"},{"type":"p","text":"ΠεÏγαÏία με αÏÏεία είναι μια θεμελιÏÎ´Î·Ï ÏÏÏ
Ïή ÏοÏ
ÏÏογÏαμμαÏιÏμοÏ, εÏιÏÏÎÏονÏÎ±Ï ÏÏÎ¹Ï ÎµÏαÏμογÎÏ Î½Î± διαÏηÏοÏν δεδομÎνα και να αλληλεÏιδÏοÏν με Ïο εξÏÏεÏÎ¹ÎºÏ ÏεÏιβάλλον. ΣÏην Python, μÏÎ»Î¹Ï Îνα αÏÏείο ανοιÏÏεί με εÏιÏÏ
Ïία Ïε λειÏοÏ
Ïγία ανάγνÏÏÎ·Ï (\'r\'), Ïο εÏÏμενο βήμα είναι η εξαγÏγή ÏοÏ
ÏεÏιεÏομÎνοÏ
ÏοÏ
. Î Python ÏÏοÏÏÎÏει διάÏοÏÎµÏ Î¼ÎµÎ¸ÏδοÏ
Ï Î³Î¹Î± αÏ
ÏÏν Ïον ÏκοÏÏ, καθεμία με Ïα δικά ÏÎ·Ï ÏαÏακÏηÏιÏÏικά ÏÏον αÏοÏά Ïην αÏοδοÏικÏÏηÏα ÏÎ·Ï Î¼Î½Î®Î¼Î·Ï, Ïον ÎλεγÏο και ÏÎ¹Ï ÏÏ
ÏικÎÏ ÏεÏιÏÏÏÏÎµÎ¹Ï ÏÏήÏηÏ. ΠκαÏανÏηÏη αÏ
ÏÏν ÏÏν αÏοÏÏÏÏεÏν είναι κÏίÏιμη για Ïη ÏÏ
γγÏαÏή ανθεκÏÎ¹ÎºÎ¿Ï ÎºÎ±Î¹ αÏοδοÏÎ¹ÎºÎ¿Ï ÎºÏδικα ÏειÏιÏÎ¼Î¿Ï Î±ÏÏείÏν."},{"type":"p","text":"<strong>Î ÎÏομÎÎ±Ï ÎνάγνÏÏηÏ: Î ÎÎÏη ÏÎ±Ï ÏÏο ÎÏÏείο</strong>"},{"type":"p","text":"Îια κενÏÏική Îννοια ÏÏην ανάγνÏÏη αÏÏείÏν είναι ο <strong>δÏομÎÎ±Ï Î±Î½Î¬Î³Î½ÏÏηÏ</strong> (ÏÏ
Ïνά αÏλÏÏ Î¿Î½Î¿Î¼Î¬Î¶ÎµÏαι <strong>δÏομÎÎ±Ï Î±ÏÏείοÏ
</strong> ή <strong>δείκÏÎ·Ï Î±ÏÏείοÏ
</strong>). ÎÏαν ανοίγεÏε Îνα αÏÏείο, Ïο ÏÏεÏÎ¹ÎºÏ <strong>ανÏικείμενο ÏειÏιÏÎ¼Î¿Ï Î±ÏÏείοÏ
</strong> διαÏηÏεί Îναν εÏÏÏεÏÎ¹ÎºÏ Î´ÏομÎα ÏοÏ
δείÏνει Ïην ÏÏÎÏοÏ
Ïα θÎÏη μÎÏα ÏÏο αÏÏείο. ΣκεÏÏείÏε Ïο Ïαν Ïον αναβοÏβήνονÏα δÏομÎα Ïε Îναν εÏεξεÏγαÏÏή κειμÎνοÏ
: Ï
ÏοδεικνÏει ÏÎ¿Ï Î¸Î± ÏÏαγμαÏοÏοιηθεί η εÏÏμενη ενÎÏγεια."},{"type":"p","text":"<ul><li>ÎÏÏικά, ÏÏαν Îνα αÏÏείο ανοίγεÏαι για ανάγνÏÏη, ο δÏομÎÎ±Ï ÏοÏοθεÏείÏαι ÏÏ
νήθÏÏ ÏÏην <strong>αÏÏή ÏοÏ
αÏÏείοÏ
</strong> (θÎÏη 0).</li><li>Îάθε λειÏοÏ
Ïγία ανάγνÏÏηÏ, ανεξάÏÏηÏα αÏÏ Ïη μÎθοδο ÏοÏ
ÏÏηÏιμοÏοιείÏαι, ξεκινά αÏÏ Ïην ÏÏÎÏοÏ
Ïα θÎÏη ÏοÏ
δÏομÎα.</li><li>
1ÎÏÎ¿Ï Î´Î¹Î±Î²Î±ÏÏοÏν Ïα δεδομÎνα, ο δÏομÎÎ±Ï ÏÏοÏÏÏά αÏ
ÏÏμαÏα ÏÏη θÎÏη αμÎÏÏÏ Î¼ÎµÏά Ïα δεδομÎνα ÏοÏ
μÏÎ»Î¹Ï ÎºÎ±ÏαναλÏθηκαν. ÎÏ
Ïή η διαδοÏική κίνηÏη διαÏÏαλίζει ÏÏι οι εÏÏÎ¼ÎµÎ½ÎµÏ Î»ÎµÎ¹ÏοÏ
ÏÎ³Î¯ÎµÏ Î±Î½Î¬Î³Î½ÏÏÎ·Ï ÏÏ
νεÏίζοÏ
ν αÏÏ ÎµÎºÎµÎ¯ ÏοÏ
ÏÏαμάÏηÏε η ÏÏοηγοÏμενη, εκÏÏÏ ÎµÎ¬Î½ εÏαναÏοÏοθεÏηθεί ÏηÏά (Ï.Ï., με Ïη ÏÏήÏη ÏοÏ
`.seek()`).</li></ul>"},{"type":"p","text":"ÎÏ
Ïή η διαÏείÏιÏη ÏοÏ
δÏομÎα είναι ζÏÏÎ¹ÎºÎ®Ï ÏημαÏÎ¯Î±Ï ÎµÏειδή Ï
ÏαγοÏεÏει Ïοιο ÏεÏιεÏÏμενο θα διαβαÏÏεί ÏÏη ÏÏ
νÎÏεια και αÏοÏÏÎÏει Ïην ÏεÏιÏÏή ανάγνÏÏη αÏÏ Ïην αÏÏή ÏοÏ
αÏÏείοÏ
, εκÏÏÏ ÎµÎ¬Î½ αÏ
ÏÏ ÎµÎ¯Î½Î±Î¹ εÏιθÏ
μηÏÏ."},{"type":"p","text":"<strong>ÎεÏÏομεÏÎµÎ¯Ï ÎÎθοδοι ÎνάγνÏÏÎ·Ï ÎÏÏείÏν και ÎιαÏείÏιÏη ÎνήμηÏ</strong>"},{"type":"p","text":"ΠεÏιλογή ÏÎ·Ï Î¼ÎµÎ¸ÏδοÏ
ανάγνÏÏÎ·Ï Î±ÏÏείÏν εÏηÏεάζει ÏημανÏικά Ïη ÏÏήÏη ÏÎ·Ï Î¼Î½Î®Î¼Î·Ï, ειδικά ÏÏαν ÏÏÏκειÏαι για μεγάλα αÏÏεία. ÎÏ ÎµÎ¾ÎµÏεÏ
νήÏοÏ
με ÏÎ¹Ï ÎºÎ¿Î¹Î½ÎÏ Î¼ÎµÎ¸ÏδοÏ
Ï Î»ÎµÏÏομεÏÏÏ:"},{"type":"p","text":"<strong>Î ÎÎÎ¸Î¿Î´Î¿Ï `.read(size=-1)`</strong>"},{"type":"p","text":"ΠμÎÎ¸Î¿Î´Î¿Ï `.read()` είναι ÏÏεδιαÏμÎνη για να εξάγει ÏεÏιεÏÏμενο αÏÏ Îνα αÏÏείο και να Ïο εÏιÏÏÏÎÏει ÏÏ Î¼Î¯Î± ενιαία ÏÏ
μβολοÏειÏά. Î ÏÏ
μÏεÏιÏοÏά ÏÎ·Ï ÎµÎ¾Î±ÏÏάÏαι κÏίÏιμα αÏÏ Ïο ÏÏοαιÏεÏÎ¹ÎºÏ ÏÏιÏμα `size`:<ul><li>Îάν Ïο `size` ÏαÏαλειÏθεί ή καθοÏιÏÏεί ÏÏ `-1` (η ÏÏοεÏιλεγμÎνη ÏοÏ
Ïιμή), η μÎÎ¸Î¿Î´Î¿Ï ÏÏοÏÏαθεί να διαβάÏει Ïο <strong>ολÏκληÏο Ïο Ï
ÏÏλοιÏο ÏεÏιεÏÏμενο</strong> ÏοÏ
αÏÏείοÏ
αÏÏ Ïην ÏÏÎÏοÏ
Ïα θÎÏη ÏοÏ
δÏομÎα μÎÏÏι Ïο ÏÎλοÏ. Το αÏοÏÎλεÏμα εÏιÏÏÏÎÏεÏαι ÏÏ Î¼Î¯Î± ενιαία ÏÏ
μβολοÏειÏά.</li><li>Îάν Ïο `size` ÏαÏÎÏεÏαι ÏÏ Î¸ÎµÏικÏÏ Î±ÎºÎÏαιοÏ, Ïο `.read()` θα διαβάÏει μÎÏÏι και ÏÏÏοÏ
Ï ÏαÏακÏήÏÎµÏ (για λειÏοÏ
Ïγία κειμÎνοÏ
) ή bytes (για δÏ
αδική λειÏοÏ
Ïγία). ΠδÏομÎÎ±Ï ÏÏοÏÏÏά καÏά Ïον αÏÎ¹Î¸Î¼Ï ÏÏν ÏαÏακÏήÏÏν/bytes ÏοÏ
διαβάÏÏηκαν.</li></ul>"},{"type":"p","text":"<strong>ÎÏίÏιμη Î ÏοειδοÏοίηÏη για Ïη Îνήμη:</strong> Î ÏÏήÏη ÏοÏ
`.read()` ÏÏÏÎ¯Ï ÏÏιÏμα Ïε Îνα ÏÎ¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿ αÏÏείο είναι εξαιÏεÏικά εÏικίνδÏ
νη. Î Python θα ÏÏοÏÏαθήÏει να ÏοÏÏÏÏει ολÏκληÏο Ïο ÏεÏιεÏÏμενο ÏοÏ
αÏÏείοÏ
ÏÏη <strong>Îνήμη ΤÏ
ÏÎ±Î¯Î±Ï Î ÏÏÏβαÏÎ·Ï (RAM)</strong> ÏοÏ
Ï
ÏολογιÏÏή ÏαÏ. Îάν Ïο αÏÏείο είναι μεγαλÏÏεÏο αÏÏ Ïη διαθÎÏιμη RAM, αÏ
ÏÏ Î¼ÏοÏεί να οδηγήÏει Ïε `OutOfMemoryError`, ÏÏοκαλÏνÏÎ±Ï Ïη ÏÏ
νÏÏιβή ÏοÏ
ÏÏογÏάμμαÏÏÏ ÏαÏ, Ïο ÏάγÏμα ÏοÏ
ÏÏ
ÏÏήμαÏÏÏ ÏÎ±Ï Î® Ïη ÏημανÏική Ï
ÏοβάθμιÏη ÏÎ·Ï Î±ÏÏδοÏηÏ. ÎÏ
Ïή η μÎÎ¸Î¿Î´Î¿Ï ÎµÎ¯Î½Î±Î¹ καÏαλληλÏÏεÏη για ÏενάÏια ÏÏοÏ
είÏÏε αÏολÏÏÏÏ Î²Îβαιοι ÏÏι Ïο αÏÏείο είναι μικÏÏ ÎºÎ±Î¹ Ïο ÏεÏιεÏÏÎ¼ÎµÎ½Ï ÏοÏ
μÏοÏεί να κÏαÏηθεί με αÏÏάλεια ÏÏη μνήμη, ÏÏÏÏ Î±ÏÏεία ÏÏ
θμίÏεÏν ή μικÏά scripts."},{"type":"p","text":"<strong>Î ÎÎÎ¸Î¿Î´Î¿Ï `.readline()`</strong>"},{"type":"p","text":"ΠμÎÎ¸Î¿Î´Î¿Ï `.readline()` ÏÏοÏÏÎÏει μια Ïιο λεÏÏομεÏή ÏÏοÏÎγγιÏη ÏÏην ανάγνÏÏη αÏÏείÏν. Îιαβάζει μία μÏνο γÏαμμή αÏÏ Ïο αÏÏείο, ξεκινÏνÏÎ±Ï Î±ÏÏ Ïην ÏÏÎÏοÏ
Ïα θÎÏη ÏοÏ
δÏομÎα, μÎÏÏι και Ïον εÏÏμενο <strong>ÏαÏακÏήÏα νÎÎ±Ï Î³ÏÎ±Î¼Î¼Î®Ï (\\\\\\\\n)</strong>. Îάν Ïο ÏÎÎ»Î¿Ï ÏοÏ
αÏÏείοÏ
εÏιÏεÏ
Ïθεί ÏÏιν αÏÏ Îναν ÏαÏακÏήÑа νÎÎ±Ï Î³ÏαμμήÏ, διαβάζει Ïο Ï
ÏÏλοιÏο ÏεÏιεÏ
1Ïμενο. Îάν ο δÏομÎÎ±Ï Î²ÏίÏκεÏαι ήδη ÏÏο ÏÎÎ»Î¿Ï ÏοÏ
αÏÏείοÏ
, εÏιÏÏÏÎÏει μια κενή ÏÏ
μβολοÏειÏά (<code>\'\'</code>)."},{"type":"p","text":"ÎÏ
Ïή η μÎÎ¸Î¿Î´Î¿Ï ÎµÎ¯Î½Î±Î¹ ιδιαίÏεÏα ÏÏήÏιμη ÏÏαν ÏÏειάζεÏαι να εÏεξεÏγαÏÏείÏε Îνα αÏÏείο <strong>γÏαμμή-ÏÏοÏ-γÏαμμή</strong> με λεÏÏομεÏή ÎλεγÏο, ÏÏ
Ïνά μÎÏα Ïε Îναν βÏÏÏο (Ï.Ï., ÎÎ½Î±Ï Î²ÏÏÏÎ¿Ï `while` ÏοÏ
ÏÏ
νεÏίζεÏαι εÏÏÏον Ïο `.readline()` εÏιÏÏÏÎÏει μη κενÎÏ ÏÏ
μβολοÏειÏÎÏ)."},{"type":"p","text":"<ul><li>Îίναι <strong>αÏοδοÏική ÏÏ ÏÏÎ¿Ï Ïη μνήμη</strong> εÏειδή ÏοÏÏÏνει μÏνο μία γÏαμμή ÏÏη μνήμη κάθε ÏοÏά, καθιÏÏÏνÏÎ±Ï Ïην καÏάλληλη για μεγαλÏÏεÏα αÏÏεία ÏÏοÏ
θÎλεÏε να εÏαÏμÏÏεÏε ÏÏ
γκεκÏιμÎνη λογική Ïε κάθε γÏαμμή.</li><li>ΠδÏομÎÎ±Ï ÏÏοÏÏÏά ÏÏην αÏÏή ÏÎ·Ï ÎµÏÏÎ¼ÎµÎ½Î·Ï Î³ÏÎ±Î¼Î¼Î®Ï Î¼ÎµÏά αÏÏ ÎºÎ¬Î¸Îµ κλήÏη.</li></ul>"},{"type":"p","text":"<strong>Î ÎÎÎ¸Î¿Î´Î¿Ï `.readlines()`</strong>"},{"type":"p","text":"ΠμÎÎ¸Î¿Î´Î¿Ï `.readlines()` διαβάζει ÏÎ»ÎµÏ ÏÎ¹Ï Ï
ÏÏλοιÏÎµÏ Î³ÏαμμÎÏ Î±ÏÏ Ïην ÏÏÎÏοÏ
Ïα θÎÏη ÏοÏ
δÏομÎα μÎÏÏι Ïο ÏÎÎ»Î¿Ï ÏοÏ
αÏÏείοÏ
και ÏÎ¹Ï ÎµÏιÏÏÏÎÏει ÏÏ Î¼Î¹Î± <strong>λίÏÏα αÏÏ ÏÏ
μβολοÏειÏÎÏ</strong>. Îάθε ÏÏ
μβολοÏειÏά ÏÏη λίÏÏα ανÏιÏÏοÏÏÏεÏει μια γÏαμμή αÏÏ Ïο αÏÏείο και ÏÏ
νήθÏÏ ÏεÏιλαμβάνει Ïον ÏαÏακÏήÏα νÎÎ±Ï Î³ÏÎ±Î¼Î¼Î®Ï (`\\\\\\\\n`) ÏÏο ÏÎÎ»Î¿Ï ÏηÏ."},{"type":"p","text":"ÎÏÏÏ Ïο `.read()` ÏÏÏÎ¯Ï ÏÏιÏμα, Ïο `.readlines()` είναι εÏικίνδÏ
νο για μεγάλα αÏÏεία. Îα ÏÏοÏÏαθήÏει να ÏοÏÏÏÏει <strong>ÏλεÏ</strong> ÏÎ¹Ï Ï
ÏÏλοιÏÎµÏ Î³ÏαμμÎÏ ÏÏη μνήμη ÏαÏ
ÏÏÏÏονα, αÏοθηκεÏονÏÎ¬Ï ÏÎµÏ ÏÏ Î¼Î¹Î± λίÏÏα αÏÏ ÏÏ
μβολοÏειÏÎÏ. ÎÏ
ÏÏ Î¼ÏοÏεί γÏήγοÏα να εξανÏλήÏει Ïη διαθÎÏιμη RAM εάν Ïο αÏÏείο είναι ÏημανÏικÏ."},{"type":"p","text":"ÎÏ
Ïή η μÎÎ¸Î¿Î´Î¿Ï ÎµÎ¯Î½Î±Î¹ αÏοδεκÏή για αÏÏεία ÏοÏ
είναι γνÏÏÏÏ ÏÏι είναι μικÏά, ÏÏοÏ
η ÏÏÏÏÏÏη ÏλÏν ÏÏν γÏαμμÏν Ïε μια λίÏÏα για μεÏÎÏειÏα εÏεξεÏγαÏία (Ï.Ï., ÏαξινÏμηÏη, ÏιλÏÏάÏιÏμα ή пакеÑнÑе опеÑаÑии) είναι βολική και δεν ενÎÏει κίνδÏ
νο για Ïη μνήμη."},{"type":"p","text":"<strong>ÎÏανάληÏη ÏÎ¬Î½Ï ÏÏο ÎνÏικείμενο ÎÏÏείοÏ
: Î Î Ï
θÏνικÏÏ Î¤ÏÏÏοÏ</strong>"},{"type":"p","text":"Î Ïιο <strong>αÏοδοÏικÏÏ, Î Ï
θÏνικÏÏ ÎºÎ±Î¹ ÏÏ
νιÏÏÏμενοÏ</strong> ÏÏÏÏÎ¿Ï Î³Î¹Î± να διαβάÏεÏε Îνα αÏÏείο γÏαμμή-ÏÏοÏ-γÏαμμή είναι να εÏαναλάβεÏε αÏεÏ
Î¸ÎµÎ¯Î±Ï ÏÎ¬Î½Ï ÏÏο ανÏικείμενο ÏειÏιÏÎ¼Î¿Ï Î±ÏÏείοÏ
ÏÏηÏιμοÏοιÏνÏÎ±Ï Îναν βÏÏÏο `for`:<br><code>for line in file_handle: # ÎÏεξεÏγαÏÏείÏε κάθε \'line\' εδÏ</code>"},{"type":"p","text":"ÎÏ
Ïή η ÏÏοÏÎγγιÏη εκμεÏαλλεÏεÏαι ÏοÏ
Ï ÎµÏÏÏεÏικοÏÏ Î¼Î·ÏανιÏμοÏÏ ÏÎ·Ï Python, ανÏιμεÏÏÏίζονÏÎ±Ï Ïο ανÏικείμενο αÏÏείοÏ
ÏÏ Îναν <strong>εÏαναλήÏÏη (iterator)</strong>. Îεν ÏοÏÏÏνει ολÏκληÏο Ïο αÏÏείο ή ακÏμα και ÏÎ»ÎµÏ ÏÎ¹Ï Î³ÏαμμÎÏ ÏÏη μνήμη ÏαÏ
ÏÏÏÏονα. ÎνÏ\' αÏ
ÏοÏ, διαβάζει και αÏοδίδει <strong>μία γÏαμμή κάθε ÏοÏά</strong>, καÏά ÏαÏαγγελία, καθÏÏ Î¿ βÏÏÏÎ¿Ï ÏÏοÏÏÏά."},{"type":"p","text":"<ul><li>ÎÏ
Ïή η <strong>\xabÏεμÏÎλικη ÏÏÏÏÏÏη\xbb (lazy loading)</strong> Ïην καθιÏÏά αÏίÏÏεÏ
Ïα αÏοδοÏική ÏÏ ÏÏÎ¿Ï Ïη μνήμη, ανεξάÏÏηÏα αÏÏ Ïο μÎÎ³ÎµÎ¸Î¿Ï ÏοÏ
αÏÏείοÏ
. Îίναι η ιδανική μÎÎ¸Î¿Î´Î¿Ï Î³Î¹Î± Ïην εÏεξεÏγαÏία ÏÎ¿Î»Ï Î¼ÎµÎ³Î¬Î»Ïν αÏÏείÏν ÏÏÏÎ¯Ï Î½Î± κινδÏ
νεÏεÏε με εξάνÏληÏη ÏÎ·Ï Î¼Î½Î®Î¼Î·Ï.</li><li>Îάθε `line` ÏοÏ
λαμβάνεÏαι με αÏ
ÏÏν Ïον ÏÏÏÏο θα ÏεÏιλαμβάνει Ïον ÏαÏακÏήÏα νÎÎ±Ï Î³ÏÎ±Î¼Î¼Î®Ï ÏÏο ÏÎÎ»Î¿Ï (`\\\\\\\\n`). Îίναι κοινή ÏÏακÏική η ÏÏήÏη ÏοÏ
`line.strip()` για Ïην αÏαίÏεÏη ÏÏν αÏÏικÏν/ÏελικÏν κενÏν, ÏÏ
μÏεÏιλαμβανομÎνοÏ
ÏοÏ
ÏαÏακÏήÏα νÎÎ±Ï Î³ÏαμμήÏ, για καθαÏÏÏεÏη εÏεξεÏγαÏία.</li></ul>"},{"type":"p","text":"<strong>ÎÎλÏιÏÏÎµÏ Î ÏακÏικÎÏ Î³Î¹Î± Ïην ÎνάγνÏÏη ÎÏÏείÏν</strong>"},{"type":"p","text":"ΣÏ
νοÏίζονÏαÏ, δίνεÏε ÏάνÏα ÏÏοÏεÏαιÏÏηÏα ÏÏην <strong>αÏοδοÏικÏÏηÏα ÏÎ·Ï Î¼Î½Î®Î¼Î·Ï</strong> καÏά Ïην ανάγνÏÏη αÏÏείÏν. Îια Ïα ÏεÏιÏÏÏÏεÏα ÏενάÏια, ειδικά ÏÏαν Ïο μÎÎ³ÎµÎ¸Î¿Ï ÏοÏ
αÏÏείοÏ
είναι άγνÏÏÏο ή δÏ
νηÏικά μεγάλο, η αÏεÏ
Î¸ÎµÎ¯Î±Ï ÎµÏανάληÏη ÏÎ¬Î½Ï ÏÏο ανÏικείμενο ÏοÏ
αÏÏείοÏ
(`for line in file_handle:`) είναι η ανÏÏεÏη εÏιλογή. ΧÏηÏιμοÏοιήÏÏε Ïο `.readline()` ÏÏαν ÏÏειάζεÏÏε ακÏιβή, ÏειÏοκίνηÏο ÎλεγÏο ÏÏην ανάγνÏÏη γÏαμμή-ÏÏοÏ-γÏαμμή. ÎÏαÏήÏÏε Ïα `.read()` και `.readlines()` για καÏαÏÏάÏÎµÎ¹Ï ÏÏοÏ
είÏÏε αÏολÏÏÏÏ Î²Îβαιοι ÏÏι Ïο αÏÏείο είναι αÏκεÏά μικÏÏ Î³Î¹Î± να ÏÏÏÎÏει άνεÏα ÏÏη μνήμη, ή ÏÏαν διαβάζεÏε ÏÏ
γκεκÏιμÎνα, μικÏά κομμάÏια δεδομÎÎ
1½Ïν με Ïο `.read(size)`."},{"type":"h3","text":"6.3.2 ΠαÏάδειγμα"},{"type":"code","code":"# ÎημιοÏ
Ïγία ενÏÏ Î±ÏÏείοÏ
για демонÑÑÑаÑиÑ\\nwith open(\'sample_log.txt\', \'w\', encoding=\'utf-8\') as f:\\n f.write(\\"2025-09-21 12:30: INFO - System startup\\\\n\\")\\n f.write(\\"2025-09-21 12:31: WARNING - Low disk space\\\\n\\")\\n f.write(\\"2025-09-21 12:32: INFO - User \'admin\' logged in\\\\n\\")\\n\\n# -- ÎÏίδειξη ÏÏν μεθÏδÏν --\\nprint(\\"--- ΧÏήÏη .read() ---\\")\\nwith open(\'sample_log.txt\', \'r\', encoding=\'utf-8\') as f:\\n full_content = f.read()\\n print(full_content)\\n\\nprint(\\"--- ΧÏήÏη .readlines() ---\\")\\nwith open(\'sample_log.txt\', \'r\', encoding=\'utf-8\') as f:\\n lines_list = f.readlines()\\n print(lines_list) # ÎκÏÏ
пÏνει μια λίÏÏα\\n\\nprint(\\"--- Î ÏÏÏÏÏÏ, αÏοδοÏικÏÏ ÏÏÏÏÎ¿Ï (iteration) ---\\")\\nwith open(\'sample_log.txt\', \'r\', encoding=\'utf-8\') as f:\\n for line in f:\\n # ÎÏεξεÏγαζÏμαÏÏε κάθε γÏαмμή ξεÏÏÏιÏÏά\\n if \\"WARNING\\" in line:\\n print(f\\"ÎνÏοÏίÏÏηκε ÏÏοειδοÏοίηÏη: {line.strip()}\\")"}]},{"slug":"writing-methods","title":"6.4 ÎÎθοδοι ÎγγÏαÏÎ®Ï ÎÏÏείÏν","description":"ÎαθαίνοÏ
με ÏÏÏ Î½Î± γÏάÏοÏ
με δεδομÎνα Ïε αÏÏεία, δίνονÏÎ±Ï ÏÏοÏοÏή ÏÏοÏ
Ï ÏÏÏοÏ
Ï Î´ÎµÎ´Î¿Î¼ÎνÏν και ÏοÏ
Ï ÏαÏακÏήÏÎµÏ Î½ÎÎ±Ï Î³ÏαμμήÏ.","course":"python","content":[{"type":"h3","text":"6.4.1 ÎεÏÏία"},{"type":"p","text":"<strong>ÎναμενÏμενοι ΤÏÏοι ÎεδομÎνÏν:</strong><br>Îίναι κÏίÏιμο να θÏ
μÏμαÏÏε ÏÏι Ïε λειÏοÏ
Ïγία κειμÎνοÏ
, οι μÎθοδοι εγγÏαÏÎ®Ï Î±Î½Î±Î¼ÎνοÏ
ν ÏÏ
μβολοÏειÏÎÏ (str). Σε δÏ
αδική λειÏοÏ
Ïγία, αναμÎνοÏ
ν ανÏικείμενα ÏÏÏοÏ
bytes (bytes-like objects). Î ÏÏοÏÏάθεια εγγÏαÏÎ®Ï Î»Î±Î½Î¸Î±ÏμÎνοÏ
ÏÏÏοÏ
θα ÏÏοκαλÎÏει `TypeError`."},{"type":"p","text":"<strong>ΣÏγκÏιÏη ÎεθÏδÏν:</strong><br><ul><li><strong>`.write(string)`:</strong> ÎÏάÏει Ïη δοθείÏα ÏÏ
μβολοÏειÏά ÏÏο αÏÏείο, ÏÏην ÏÏÎÏοÏ
Ïα θÎÏη ÏοÏ
δÏομÎα. <strong>ΣημανÏική ΣημείÏÏη:</strong> Î `.write()` <strong>ÎÎÎ</strong> ÏÏοÏθÎÏει αÏ
ÏÏμαÏα Ïον ÏαÏακÏήÏα νÎÎ±Ï Î³ÏÎ±Î¼Î¼Î®Ï (`\\\\\\\\n`). Î ÏÎÏει να Ïον ÏÏοÏθÎÏεÏε ÏηÏά ÏÏη ÏÏ
μβολοÏειÏά ÏÎ±Ï Î±Î½ θÎλεÏε να δημιοÏ
ÏγήÏεÏε διακÏιÏÎÏ Î³ÏαμμÎÏ.</li><li><strong>`.writelines(iterable_of_strings)`:</strong> ÎÎÏεÏαι Îνα iterable (Ï.Ï., μια λίÏÏα) αÏÏ ÏÏ
μβοлоÏειÏÎÏ ÎºÎ±Î¹ ÏÎ¹Ï Î³ÏάÏει ÏÏο αÏÏείο Ïη μία μεÏά Ïην άλλη. <strong>Î ÏοÏοÏή:</strong> ΠαÏά Ïο Ïνομά ÏηÏ, οÏÏε αÏ
Ïή η μÎÎ¸Î¿Î´Î¿Ï ÏÏοÏθÎÏει ÏαÏακÏήÏÎµÏ Î½ÎÎ±Ï Î³ÏÎ±Î¼Î¼Î®Ï Î¼ÎµÏÎ±Î¾Ï ÏÏν ÏÏοιÏείÏν. Îίναι αÏλÏÏ Î¼Î¹Î± βελÏιÏÏοÏοιημÎνη μÎÎ¸Î¿Î´Î¿Ï Î³Î¹Î± Ïην εκÏÎλεÏη ÏολλαÏλÏν `write` ÏÏÏÎ¯Ï Î½Î± ÏÏειάζεÏαι ÏηÏÏÏ Î²ÏÏÏοÏ.</li></ul>"},{"type":"h3","text":"6.4.2 ΠαÏάδειγμα"},{"type":"code","code":"report_lines = [\\n \\"ÎναÏοÏά Î ÏλήÏεÏν ΣεÏÏεμβÏίοÏ
2025\\",\\n \\"====================================\\",\\n \\"Î ÏοÏÏν Î: 150 μονάδεÏ\\",\\n \\"Î ÏοÏÏν Î: 220 μονάδεÏ\\",\\n \\"ΣÏνολο: 370 μονάδεÏ\\"\\n]\\n\\n# ΧÏήÏη .writelines() αÏαιÏεί Ïη μη αÏ
ÏÏμαÏη ÏÏοÏθήκη ÏοÏ
\'\\\\n\'\\nlines_with_newlines = [line + \'\\\\n\' for line in report_lines]\\n\\nwith open(\'report.txt\', \'w\', encoding=\'utf-8\') as f:\\n f.writelines(lines_with_newlines)\\n\\nprint(\\"Το αÏÏείο \'report.txt\' δημιοÏ
Ïγήθηκε.\\")\\n\\n# ÎναλλακÏικά, με .write() μÎÏα Ïε βÏÏÏο\\nwith open(\'report_alt.txt\', \'w\', encoding=\'utf-8\') as f:\\
1n for line in report_lines:\\n f.write(line + \'\\\\n\')\\n\\nprint(\\"Το αÏÏείο \'report_alt.txt\' δημιοÏ
Ïγήθηκε.\\")"}]},{"slug":"error-handling","title":"6.5 ÎιαÏείÏιÏη ΣÏαλμάÏÏν (Error Handling)","description":"Îι λειÏοÏ
ÏÎ³Î¯ÎµÏ I/O είναι αÏÏ ÏÎ¹Ï Ïιο εÏιÏÏÎ±Î»ÎµÎ¯Ï Ïε Îνα ÏÏÏγÏαμμα, καθÏÏ ÎµÎ¾Î±ÏÏÏνÏαι αÏÏ Ïο εξÏÏεÏÎ¹ÎºÏ ÏεÏιβάλλον. Î ÏÏÏÏή διαÏείÏιÏη ÏÏαλμάÏÏν είναι αÏαÏαίÏηÏη για Ïη δημιοÏ
Ïγία ανθεκÏικÏν εÏαÏμογÏν.","course":"python","content":[{"type":"h3","text":"6.5.1 ÎεÏÏία"},{"type":"p","text":"<strong>ΠΦÏÏη ÏÏν ΣÏαλμάÏÏν I/O:</strong><br>Îνα ÏÏάλμα καÏά Ïον ÏειÏιÏÎ¼Ï Î±ÏÏείÏν δεν είναι Îνα Î»Î¿Î³Î¹ÎºÏ ÏÏάλμα ÏοÏ
ÏÏογÏάμμαÏοÏ, αλλά μια εξαίÏεÏη (exception) ÏοÏ
ÏÏοκÏÏÏει αÏÏ Î¼Î¹Î± καÏάÏÏαÏη Ïην οÏοία Ïο ÏÏÏγÏαμμα δεν μÏοÏεί να ελÎγξει: Ïο αÏÏείο δεν Ï
ÏάÏÏει, Ïο λειÏοÏ
ÏÎ³Î¹ÎºÏ ÏÏÏÏημα αÏνείÏαι Ïην ÏÏÏÏβαÏη, ο δίÏÎºÎ¿Ï ÎµÎ¯Î½Î±Î¹ γεμάÏοÏ. Î Python ÏÏηÏιμοÏοιεί Ïον μηÏανιÏÎ¼Ï ÏÏν εξαιÏÎÏεÏν για να ÏημαÏοδοÏήÏει αÏ
ÏÎÏ ÏÎ¹Ï Î±Î½ÏÎ¼Î±Î»ÎµÏ ÎºÎ±ÏαÏÏάÏειÏ."},{"type":"p","text":"<strong>ÎοινÎÏ ÎξαιÏÎÏÎµÎ¹Ï I/O:</strong><br><ul><li>`FileNotFoundError`: Î Ïιο ÏÏ
Ïνή. Î ÏοκÏÏÏει ÏÏαν ÏÏοÏÏαθείÏε να ανοίξεÏε Îνα αÏÏείο Ïε λειÏοÏ
Ïγία ανάγνÏÏÎ·Ï (\'r\') ÏοÏ
δεν Ï
ÏάÏÏει.</li><li>`PermissionError`: Το ÏÏÏγÏαμμα δεν ÎÏει Ïα αÏαÏαίÏηÏα δικαιÏμαÏα αÏÏ Ïο λειÏοÏ
ÏÎ³Î¹ÎºÏ ÏÏÏÏημα για να διαβάÏει ή να γÏάÏει ÏÏο ÏÏ
γκεκÏιμÎνο αÏÏείο ή καÏάλογο.</li><li>`IsADirectoryError`: Î ÏοÏÏαθείÏε να ανοίξεÏε Îναν καÏάλογο Ïαν να ήÏαν αÏÏείο.</li><li>`io.UnsupportedOperation`: Î ÏοÏÏαθείÏε να εκÏελÎÏεÏε μια λειÏοÏ
Ïγία ÏοÏ
δεν Ï
ÏοÏÏηÏίζεÏαι αÏÏ Ïην ÏÏÎÏοÏ
Ïα λειÏοÏ
Ïγία ανοίγμαÏÎ¿Ï (Ï.Ï., `write()` Ïε αÏÏείο ÏοÏ
ανοίÏÏηκε με \'r\').</li></ul>"},{"type":"p","text":"<strong>Το ÎÏλοκ try...except:</strong><br>ÎÏ
Ïή η δομή είναι ο κανονικÏÏ Î¼Î·ÏανιÏμÏÏ ÏÎ·Ï Python για Ïη \\\\\\"ÏÏλληÏη\\\\\\" (catching) και Ïον ÏειÏιÏÎ¼Ï ÎµÎ¾Î±Î¹ÏÎÏεÏν.<br>1. ΠκÏÎ´Î¹ÎºÎ±Ï ÏοÏ
ενδÎÏεÏαι να ÏÏοκαλÎÏει ÏÏάλμα ÏοÏοθεÏείÏαι μÎÏα ÏÏο μÏλοκ `try`.<br>2. Îν καÏά Ïην εκÏÎλεÏη ÏοÏ
`try` ÏÏοκÏÏει μια εξαίÏεÏη, η κανονική Ïοή διακÏÏÏεÏαι και ο διεÏμηнÎÎ±Ï ÏάÏνει για Îνα μÏλοκ `except` ÏοÏ
ÏαιÏιάζει με Ïον ÏÏÏο ÏÎ·Ï ÎµÎ¾Î±Î¯ÏεÏηÏ.<br>3. Îν βÏεθεί, εκÏελείÏαι ο κÏÎ´Î¹ÎºÎ±Ï ÏοÏ
`except` και Ïο ÏÏÏγÏαμμα ÏÏ
νεÏίζει μεÏά Ïο μÏλοκ `try-except`, ανÏί να ÏεÏμαÏιÏÏεί βίαια."},{"type":"h3","text":"6.5.2 ΠαÏάδειγμα"},{"type":"code","code":"# Το input() δεν λειÏοÏ
Ïγεί Ïε αÏ
ÏÏ Ïο ÏεÏιβάλλον, οÏÏÏε ÏÏοÏομοιÏνοÏ
με.\\nfile_path = \\"non_existent_file.txt\\" \\n\\ntry:\\n # ΣÏ
νδÏ
άζοÏ
με Ïην αÏÏάλεια ÏοÏ
\'with\' με Ïην ανθεκÏικÏÏηÏα ÏοÏ
\'try...except\'\\n with open(file_path, \'r\', encoding=\'utf-8\') as f:\\n print(\\"\\\\n--- ΠεÏιεÏÏμενο ÎÏÏείοÏ
---\\")\\n content = f.read()\\n print(content)\\n print(\\"--------------------------\\")\\n\\nexcept FileNotFoundError:\\n print(f\\"ΣÏάλμα: Το αÏÏείο ÏÏη διαδÏομή \'{file_path}\' δεν βÏÎθηκε.\\")\\nexcept PermissionError:\\n print(f\\"ΣÏάλμα: Îεν Ï
ÏάÏÏοÏ
ν Ïα αÏαÏαίÏηÏα δικαιÏμαÏα για Ïην ανάγνÏÏη ÏοÏ
αÏÏείοÏ
\'{file_path}\'.\\")\\nexcept Exception as e:\\n # Îνα Î³ÎµÎ½Î¹ÎºÏ \'except\' για να ÏιάÏει οÏοιοδήÏοÏε άλλο αÏÏÏβλεпÏο ÏÏάλμα\\n print(f\\"Î ÏοÎκÏ
Ïε Îνα μη αναμενÏμενο ÏÏάλμα: {e}\\")\\n\\nprint(\\"\\\\nΠεκÏÎλεÏη ÏοÏ
ÏÏογÏάμμαÏÎ¿Ï ÏÏ
νεÏίζεÏαι ομαλά.\\")"}]}]}')}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.