Αρχεία
Τα δεδομένα τα οποία χρειάζεται ένα πρόγραμμα μπορούν να διαβαστούν από ένα αρχείο. Επίσης τα αποτελέσματα τα οποία παράγονται μπορούν να καταγραφούν (να εκτυπωθούν) σε αρχείο.
Ένα αρχείο μπορεί να συνδεθεί με το πρόγραμμά μας μέσω της εντολής open
.
f = open('filename.dat','w')
Η παραπάνω εντολή δημιουργεί αρχείο με όνομα filename.dat
και το συνδέει με το πρόγραμμά μας με σκοπό να γραφούν ('w' - write) στο αρχείο νέα αποτελέσματα.
Η σύνδεση του αρχείου γίνεται μέσω ενός νέου αντικειμένου της python στο οποίο δώσαμε το όνομα f.
Από εδώ και κάτω μπορούμε να επεμβαίνουμε στο αρχείο (με το όνομα filename.dat
) χρησιμοποιώντας τη μεταβλητή f.
Παράδειγμα. Γράψτε μία σειρά ακεραίων καθώς και το τετράγωνό τους και την τετραγωνική τους ρίζα σε ένα αρχείο.
import math
f = open('test.dat','w')
for i in range(10):
s = '{:4d} {:5d} {:5.3f}\n'.format(i,i**2,math.sqrt(i))
f.write(s)
f.close()
Ακολουθήσαμε τα εξής βήματα:
- Συνδέουμε το αρχείο (
open
) - Δημιουργούμε μία συμβολοσειρά s η οποία περιέχει τη μορφή την οποία θέλουμε να εκτυπώσουμε.
- Η μέθοδος
write
γράφει στο αρχείο τη συμβολοσειρά s. - Η μέθοδος
close
τερματίζει τη σύνδεση του αρχείου με το πρόγραμμα (επίσης φέρνει το αρχείο στην τελική του μορφή).
Θα δούμε πώς μπορούμε να γράψουμε δεδομένα (αποτελέσματα) σε ένα αρχείο.
Παράδειγμα. (μέθοδος read
)
Διαβάστε το περιεχόμενο ενός αρχείου και εκτυπώστε το στην οθόνη.
f = open('test.dat','r')
s = f.read()
f.close()
print(s)
Ακολουθήσαμε τα εξής βήματα:
- Συνδέουμε το αρχείο (
open
) δηλώνοντας ότι θα διαβάσουμε από αυτό ('r'
- read). - Διαβάζουμε όλο το αρχείο (
f.read()
) και το περιεχόμενο πηγαίνει στη μεταβλητή s - Η μέθοδος
close
τερματίζει τη σύνδεση του αρχείου με το πρόγραμμα. - Τέλος γράφουμε το περιεχόμενο του αρχείου στην οθόνη.
Ένα αρχείο το οποίο είναι πιθανόν πολύ μεγάλο είναι οποσδήποτε προτιμότερο να διαβαστεί κατά τμήματα. Η μέθοδος readline()
διαβάζει μία γραμμή από αρχείο.
Παράδειγμα. (μέθοδος readline
)
Διαβάστε το περιεχόμενο ενός αρχείου κατά γραμμές και εκτυπώστε τες στην οθόνη.
f = open('test.dat','r')
while True:
s = f.readline()
if s == '': break
print(s,end='') # είτε: print(s[:-1]), print(s.rstrip())
f.close()
Ακολουθήσαμε τα εξής βήματα:
- Συνδέουμε το αρχείο (
open
) δηλώνοντας ότι θα διαβάσουμε από αυτό. - Αρχίζουμε μία ανακύκλωση (
while
) διαβάζοντας διαδοχικές γραμμές με τη μέθοδοreadline()
και το περιεχόμενο πηγαίνει στη μεταβλητή s - Μετά την τελευταία γραμμή του αρχείου η
readline
θα δώσει μία κενή συμβολοσειρά. Αυτό το εκμεταλλευόμαστε για να λήξει η ανακύκλωση. - Τυπώνουμε τη γραμμή την οποία διαβάσαμε. Όμως, κάθε γραμμή που διαβάζουμε τελειώνει με τον χαρακτήρα
\n
. Για να αποφύγουμε την αλλαγή γραμμής σε κάθε εκτύπωση του s δίνουμε στην εντολήprint
ως τελευταίο χαρακτήρα τον κενό. - Tερματίζoυμε τη σύνδεση του αρχείου με το πρόγραμμα.
Ερώτηση. Τι θα συμβεί με το παραπάνω πρόγραμμα αν το αρχείο περιέχει σε κάποιο σημείο μία κενή γραμμή;
Παράδειγμα. (Ανακύκλωση στο αντικείμενο του αρχείου) Υπάρχει μία ακόμα μέθοδος για να διαβάσουμε ένα αρχείο χρησιμοποιώντας απευθείας το αντικείμενο του αρχείου. Μπορούμε να διαβάσουμε το περιεχόμενο ενός αρχείου κατά γραμμές.
f = open('test.dat','r')
for line in f:
print(line,end='')
f.close()
Ακολουθήσαμε τα εξής βήματα:
- Συνδέουμε το αρχείο (
open
). - Κάνουμε μία ανακύκλωση (
for
) στις διαδοχικές γραμμές του αρχείου διατρέχοντας απευθείας το αντικείμενο του αρχείου f. - Τυπώνουμε τη γραμμή την οποία διαβάσαμε αποφεύγοντας την αλλαγή γραμμής.
- Tερματίζoυμε τη σύνδεση του αρχείου με το πρόγραμμα.
Ερώτηση. (Μέθοδος readlines
)
Δείτε πώς μπορείτε να διαβάσετε το περιεχόμενο αρχείου με τη μέθοδο readlines
(όπως στον ακόλουθο κώδικα).
f = open('test.dat','r')
f.readlines()
Προσάρτηση δεδομένων. Μπορούμε να ανοίξουμε ένα αρχείο για προσάρτηση (append) δεδομένων:
f = open('test.dat','a')
Ανάγνωση και αποθήκευση. Μπορούμε να ανοίξουμε ένα αρχείο για ανάγνωση και για αποθήκευση δεδομένων:
f = open('test.dat','r+')
Πρόβλημα. Έστω το αρχείο το οποίο δημιουργείται με τον κώδικα:
import math
f = open('test.dat','w')
for i in range(10):
s = '{:4d}, {:5d}, {:5.3f}\n'.format(i,i**2,math.sqrt(i))
f.write(s)
f.close()
Διαβάστε το αρχείο και εκχωρήστε σε μεταβλητές κάθε έναν από τους τρεις αριθμούς σε μία γραμμή του αρχείου. μετά ελέγξτε αν πραγματικά το 2ος αριθμός είναι το τετράγωνο του πρώτου και ο τρίτος είναι η τετραγωνική του ρίζα.
import math
f = open('test.dat','r')
for line in f:
line = line.split(',')
i = line[0].strip(); i = int(i)
i2 = line[1].strip(); i2 = int(i2)
isq = line[2].strip(); isq = float(isq)
if i2 != i**2:
print('line {:3d}: {:4d} != {:3d}**2'.format(i,i2,i))
elif abs(isq-math.sqrt(i))>1e-3:
print('line {:3d}: {:f} != sqrt({:3d})'.format(i,isq,i))
else:
print(i,i2,isq)
f.close()
Μελέτη
Βιβλιογραφία
- Python documentation.
- J.V. Guttag, Υπολογισμοί και προγραμματισμός με την python.
- Δημήτριος Καρολίδης, Μαθαίνετε εύκολα python (Εκδόσεις Καρολίδη, 2016).
- Κ. Μαγκούτης, Χ. Νικολάου, Εισαγωγή στον αντικειμενοστραφή προγραμματισμό με Python, (Αποθετήριο "Κάλλιπος", 2016).