Επιστημονικά Θέματα, Τεχνολογικά Νέα, Μουσική, Τραγούδια, Προγραμματισμός, Φωτογραφίες, Βίντεο, Καλλιτεχνικά θέματα, Τρόπος Ζωής, Θέματα θρησκείας, Συμβουλές και άλλα πολλά από το www.iliasblog.gr  

Αρχεία


Όσο εκτελείται ένα πρόγραμμα, τα δεδομένα που επεξεργάζεται είναι
αποθηκευμένα προσωρινά στην κύρια μνήμη του υπολογιστή (μνήμη RAM). Όταν ολοκληρωθεί η εκτέλεση του προγράμματος ή κλείσει ο υπολογιστής, τα δεδομένα που βρίσκονται στη μνήμη RAM σβήνονται. Τα δεδομένα αποθηκεύονται μόνιμα και μπορούν να ξαναχρησιμοποιηθούν με κάθε νέο άνοιγμα του υπολογιστή  μόνο αν τοποθετηθούν σε αρχεία σε κάποιο αποθηκευτικό μέσο (σκληρό δίσκο, flash memory, οπτικό δίσκο).

Στην περίπτωση που έχουμε μεγάλο πλήθος αρχείων είναι χρήσιμο να τα οργανώνουμε σε φακέλους (folders). Κάθε αρχείο ταυτοποιείται με ένα μοναδικό όνομα μέσα σε έναν φάκελο ή έναν συνδυασμό ονόματος αρχείου και μονοπατιού φακέλων (pathname). 
Τα αρχεία τα μεταχειριζόμαστε σαν τετράδια. Ένα τετράδιο πρώτα το ανοίγουμε και, όταν τελειώσουμε το γράψιμο, το κλείνουμε. Όταν είναι ανοικτό, μπορούμε να διαβάσουμε από αυτό ή να γράψουμε σε αυτό. Σε κάθε περίπτωση ξέρουμε πού ακριβώς είμαστε μέσα στο τετράδιο. Όλα αυτά εφαρμόζονται και στα αρχεία. Για να ανοίξουμε ένα αρχείο, προσδιορίζουμε ένα όνομα και δηλώνουμε εάν θέλουμε να το διαβάσουμε (read) ή να το γράψουμε (write). Όταν τελειώσουμε την εργασία μας με ένα αρχείο, θα πρέπει να το κλείσουμε (close). Στο κεφάλαιο αυτό θα διαχειριστούμε αρχεία κειμένου (text files), τα οποία δεν είναι τίποτε άλλο παρά μια σειρά από χαρακτήρες (συμβολοσειρές) που είναι αποθηκευμένοι σε ένα μόνιμο μέσο αποθήκευσης (σκληρό δίσκο, κ.λπ.). Τα αρχεία κειμένου μπορούν να διαβαστούν από έναν άνθρωπο, σε αντίθεση με τα δυαδικά αρχεία (binary files) για τα οποία απαιτούνται κατάλληλα προγράμματα για την ανάγνωση και την αξιοποίησή τους. 

ΓΡΑΨΙΜΟ ΣΕ ΕΝΑ ΑΡΧΕΙΟ


Για να γράψουμε δεδομένα σε ένα αρχείο κειμένου, θα πρέπει πρώτα να το ανοίξουμε, μετά να γράψουμε και στο τέλος να το κλείσουμε. Για παράδειγμα:


Το αρχείο κειμένου που δημιουργήθηκε είναι το παρακάτω:


Η συνάρτηση open δέχεται δύο ορίσματα: το πρώτο είναι το όνομα του αρχείου (χωρίς αναφορά μονοπατιού εξ ορισμού ο φάκελος του αρχείου είναι ο φάκελος στον οποίο είναι εγκατεστημένη η Python) και το δεύτερο όρισμα είναι ο τρόπος ανοίγματος (mode). Ο mode ‘w’ (write, γράψιμο) σημαίνει ότι ανοίγουμε το αρχείο για γράψιμο. Αν το αρχείο που ανοίγουμε για γράψιμο υπάρχει ήδη, τότε τα δεδομένα που περιέχει σβήνονται όλα και αντικαθίστανται από τα νέα που γράφουμε. Αν το αρχείο δεν υπάρχει, τότε αυτό απλά δημιουργείται και είναι έτοιμο για να γράψουμε δεδομένα σε αυτό. Η εκτέλεση της εντολής open δημιουργεί ένα αντικείμενο αρχείου πάνω στο οποίο μπορούμε να επικαλεστούμε μεθόδους. Με τη μέθοδο write μπορούμε να γράψουμε δεδομένα σε ένα αρχείο. Κατά την επίκληση της write εμφανίζεται το πλήθος των χαρακτήρων που γράφονται στο αρχείο. Επίσης, το όρισμα της write πρέπει να είναι συμβολοσειρά. Έτσι, αν θέλουμε να γράψουμε και άλλες τιμές (π.χ. αριθμούς), θα πρέπει πρώτα να τις μετατρέψουμε σε συμβολοσειρές με χρήση της συνάρτησης str. Για να αλλάξουμε γραμμή σε ένα αρχείο, χρησιμοποιούμε τον χαρακτήρα διαφυγής \n. Στο τέλος το κλείσιμο του αρχείου γίνεται με την επίκληση της μεθόδου close πάνω στο αντικείμενο του αρχείου. 

Ας δούμε άλλο ένα παράδειγμα:




Είναι αυτονόητο ότι θα πρέπει να προϋπάρχει το μονοπάτι φακέλων που δίνεται ως όρισμα στη συνάρτηση open (π.χ. στα προηγούμενα παραδείγματα το C:\myfolder\), διαφορετικά θα εμφανιστεί μήνυμα λάθους. Επίσης, προτιμήσαμε να δώσουμε στα αρχεία μας την κατάληξη .txt, ώστε να ανοίγουν εύκολα με το Σημειωματάριο των Windows


ΑΝΑΓΝΩΣΗ ΑΠΟ ΕΝΑ ΑΡΧΕΙΟ

Για να ανοίξουμε ένα αποθηκευμένο αρχείο κειμένου  για ανάγνωση, πρέπει να χρησιμοποιήσουμε τον mode ‘r’ (read, ανάγνωση). Αν προσπαθήσουμε να ανοίξουμε για ανάγνωση ένα αρχείο που δεν υπάρχει, τότε θα εμφανιστεί μήνυμα λάθους. Το περιεχόμενο ενός αρχείου διαβάζεται ως συμβολοσειρά.  

Ας δούμε ένα παράδειγμα (χρησιμοποιούμε το αρχείο του προηγούμενου παραδείγματος): 




Η μέθοδος read διαβάζει δεδομένα  από ένα αρχείο. Χωρίς ορίσματα διαβάζει ως συμβολοσειρά όλο το περιεχόμενο του αρχείου. Μπορεί όμως να πάρει ως όρισμα έναν αριθμό που καθορίζει το πλήθος των χαρακτήρων που θα αναγνωστούν. Για παράδειγμα: 



Στο παρακάτω παράδειγμα θα δημιουργήσουμε μια συνάρτηση για να τυπώνουμε γραμμή-γραμμή το περιεχόμενο ενός αρχείου με χρήση βρόγχου for:






Η Python διαθέτει δύο ακόμα χρήσιμες μεθόδους για αρχεία. Η μέθοδος readline διαβάζει όλους τους χαρακτήρες μέχρι και τον επόμενο χαρακτήρα αλλαγής γραμμής. Η μέθοδος readlines επιστρέφει όλες τις εναπομένουσες τιμές ως λίστα από συμβολοσειρές. Για παράδειγμα: 






Ας δούμε άλλο ένα παράδειγμα προγράμματος που επεξεργάζεται γραμμές σε ένα αρχείο κειμένου. Πιο συγκεκριμένα, το πρόγραμμα αυτό δημιουργεί ένα αντίγραφο ενός αρχείου παραλείποντας γραμμές που αρχίζουν με τον χαρακτήρα @






Στην περίπτωση που θέλουμε να ανοίξουμε ένα αρχείο και να γράψουμε επιπλέον δεδομένα  μετά το τέλος του,  μπορούμε να χρησιμοποιήσουμε τον mode ‘a’ (append, προσθήκη). Για παράδειγμα (χρησιμοποιούμε το αρχείο mynewfile.txt του προηγούμενου παραδείγματος): 


Όπως είδαμε και προηγουμένως, το όρισμα της μεθόδου write πρέπει να είναι συμβολοσειρά. Ο ευκολότερος τρόπος για να μετατρέψουμε μια τιμή που δεν είναι συμβολοσειρά σε συμβολοσειρά είναι με χρήση της συνάρτησης str. Εναλλακτικά, μπορούμε να χρησιμοποιήσουμε τον τελεστή διάταξης (format) %. Στους ακέραιους αριθμούς ο % είναι ο τελεστής modulus και επιστέφει το υπόλοιπο μιας διαίρεσης. Όταν όμως ο πρώτος τελεστέος είναι συμβολοσειρά, τότε ο τελεστής % λειτουργεί ως τελεστής διάταξης. Ο δεύτερος τελεστέος είναι πλειάδα εκφράσεων και το αποτέλεσμα είναι μια συμβολοσειρά. Για παράδειγμα: 


<<ΑΛΜΕΥΣΗ>> (PICKLING)

Είδαμε ότι οτιδήποτε γράφουμε σε ένα αρχείο πρέπει πρώτα να μετατραπεί σε συμβολοσειρά. Αυτό έχει ως αποτέλεσμα να χάνεται η αρχική πληροφορία για τον τύπο των τιμών που γράφουμε στο αρχείο και μάλιστα δεν ξέρουμε πού τελειώνει η μια τιμή και πού αρχίζει η επόμενη. Για παράδειγμα: 


Η λύση είναι η «άλμευση» (pickling) η οποία «συντηρεί» τις δομές δεδομένων. Εισάγουμε το άρθρωμα pickle και μετά ανοίγουμε το αρχείο όπως κάνουμε συνήθως με mode ‘wb’ (write binary). Για αποθήκευση μιας δομής δεδομένων χρησιμοποιούμε τη συνάρτηση dump και κλείνουμε το αρχείο με τον συνηθισμένο τρόπο. Για να διαβάσουμε μια δομή δεδομένων από ένα αρχείο, χρησιμοποιούμε τη συνάρτηση load. Το άνοιγμα του αρχείου πρέπει να γίνει με mode ‘rb’ (read binary). Για παράδειγμα:  





Μακρής Ηλίας Π.Ε. Πληροφορικής