Τα αρχεία είναι απαραίτητα προκειμένου να φτιάξουμε προγράμματα χρήσιμα τα οποία να ικανοποιούν τις ανάγκες μας. Τα αρχεία επιλύουν το πρόβλημα τής εξωτερικής αποθήκευσης αποτελεσμάτων και δεδομένων. Η αποθήκευση αυτή συμβαίνει σε περιφερειακές συσκευές, σκληρούς δίσκους, δίσκους ssd, usb sticks κλπ.
Οι τρόποι με τους οποίους μπορούμε να ανοίξουμε ένα αρχείο είναι:
- Για ανάγνωση δεδομένων: ‘r’
- Για εγγραφή δεδομένων: ‘w’
- Για προσθήκη δεδομένων: ‘a’
- Για ανάγνωση/εγγραφή δεδομένων ταυτόχρονα: ‘r+’
Αρχικά, θα πρέπει να ανοίξουμε ένα αρχείο για κάποιο λόγο. Τα αρχεία ανοίγουν για ανάγνωση δεδομένων ‘r’, για έξοδο δεδομένων ‘w’, για ενημέρωση δεδομένων ‘a’. Το άνοιγμα ενός αρχείου για ανάγνωση δεδομένων (είσοδο δεδομένων μέσα στο πρόγραμμα ) γίνεται με την έκφραση:
fin = open('f1.txt','r')
To ‘fin’ ονομάζεται χειριστής αρχείου. Αυτή είναι μια πάγια τακτική στον προγραμματισμό. Ενώ το αρχείο αναφέρεται στο λειτουργικό σύστημα με το όνομά του ‘f1.txt’ μέσα στο πρόγραμμα θα αναφέρεται με τον χειριστή αρχείου ‘fin’. Με την εντολή ‘open’ ανοίγουμε το αρχείο ‘f1.txt’ για ανάγνωση ‘r’. Το όνομα τού χειριστή αρχείου είναι αυθαίρετο και είμαστε ελεύθεροι να χρησιμοποιήσουμε οποιοδήποτε όνομα θέλουμε. Στην πράξη όταν θέλουμε να έχουμε ένα αρχείο για είσοδο δεδομένων τότε διαλέγουμε ένα όνομα όπως ‘fin’ από το οποίο καταλαβαίνουμε ότι το αρχείο έχει ανοίξει για είσοδο δεδομένων. Τούτο είναι σημαντικό όταν έχουμε ανοίξει πολλά αρχεία στο πρόγραμμά μας ή όταν θέλομε να χρησιμοποιήσουμε ένα αρχείο αλλά δεν γνωρίζουμε γιατί το έχουμε ανοίξει.
Όταν θέλομε να διαβάσουμε τα δεδομένα από το αρχείο μπορούμε να χρησιμοποιήσουμε την έκφραση:
fileContents = fin.read()
Με την έκφραση αυτή διαβάζουμε όλα τα δεδομένα τού αρχείου και τα αποθηκεύουμε όλα στην μεταβλητή ‘fileContents’ . Η συνάρτηση ‘read()’ μπορεί να δεχτεί ένα όρισμα το οποίο θα δείχνει τον αριθμό τών bytes που θα διαβαστούν από την συνάρτηση. Για παράδειγμα η επόμενη έκφραση θα διαβάσει τους επόμενους 100 χαρακτήρες:
next100Bytes = fin.read(100)
Ένας άλλος τρόπος ανάγνωσης του αρχείου είναι γραμμή – γραμμή με την μέθοδο ‘readline()’. Με την ‘readline()’ διαβάζουμε μια μια γραμμή απο το αρχείο. Με την επόμενη έκφραση μπορούμε να διαβάσουμε όλα τα δεδομένα τού αρχείου γραμμή – γραμμή και να τα εμφανίσουμε στην οθόνη τού υπολογιστή:
for line in fin:
print(fin.readline())
Το άνοιγμα ενός αρχείου για έξοδο δεδομένων γίνεται με την έκφραση:
fout = open('f1.txt','w')
Το άνοιγμα ενός αρχείου για προσθήκη δεδομένων γίνεται με την έκφραση:
fout = open('f1.txt','a')
Προκειμένου να γράψουμε δεδομένα μέσα στο αρχείο χρησιμοποιούμε την μέθοδο ‘write()’. Με την μέθοδο αυτή μπορούμε να γράψουμε αλφαριθμητικά μέσα στο αρχείο:
fout.write('Hello world!')
Τέλος, κλείνουμε το αρχείο προκειμένου να είμαστε βέβαιοι ότι δεν θα χάσουμε πολύτιμα δεδομένα.
fin.close()
fout.close()
Επίσης, μπορούμε να πάρουμε την θέση τού δείκτη ενός αρχείου με την μέθοδο ‘tell()’ η οποία επιστρέφει την τρέχουσα θέση τού δείκτη ενός αρχείου και την οποία την κρατάμε σε μια μεταβλητή προκειμένου να την χρησιμοποιήσουμε αργότερα όπως φαίνεται στο επόμενο κομμάτι κώδικα:
currentPos = fin.tell()Στο σημείο αυτό τονίζεται ότι ο δείκτης αρχείου ενημερώνεται αυτόματα μετά από κάθε πράξη που κάνουμε με το αρχείο. Έχουμε την δυνατότητα να χειριστούμε κι εμείς το δείκτη ενός αρχείου με την μέθοδο ‘seek(offset,fromWhere)’. Το πρώτο όρισμα δείχνει πόσο θα μετακινήσουμε τον δείκτη τού αρχείου ενώ το δεύτερο όρισμα δείχνει από ποιά θέση τού αρχείου θα μετρήσει η μετακίνηση. Αν έχουμε:
α. 0 τότε η μετακίνηση τού δείκτη αρχίζει να μετράει από την αρχή τού αρχείου.
β. 1 τότε η μετακίνηση αρχίζει να μετράει από την τρέχουσα θέση τού αρχείου.
γ. 2 τότε η μετακίνηση αρχίζει να μετράει από το τέλος τού αρχείου και το offset θα πρέπει να είναι αρνητικός αριθμός.
fin.seek(100,0)
fin.seek(100,1)
fin.seek(-100,2)