Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ"— Μεταγράφημα παρουσίασης:

1 ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Eισαγωγή στον προγραμματισμό Αρχεία Διδάσκων: Ν. Μαμουλής

2 Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

3 ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
Αρχεία Χειμερινό Εξάμηνο 2014

4 Διαχείριση αρχείων Ως τώρα έχουμε δει πως μπορούμε να πάρουμε την είσοδο ενός προγράμματος από το χρήστη και πως να τυπώνουμε την έξοδό του στην οθόνη. Σε πολλές εφαρμογές, θέλουμε να πάρουμε την είσοδο ενός προγράμματος από ένα αρχείο του υπολογιστή, ή να γράψουμε σε ένα αρχείο. Η Python παρέχει συναρτήσεις για διάβασμα και γράψιμο σε αρχεία.

5 Τύποι αρχείων Αρχεία κειμένων (text files): Περιέχουν χαρακτήρες ASCII μόνο και μπορούμε να τα διαβάσουμε ανοίγοντάς τα με έναν απλό επεξεργαστή κειμένου (π.χ. αρχεία με κατάληξη txt) ή τυπώνοντάς τα στην κονσόλα του λειτουργικού συστήματος. Δυαδικά αρχεία κειμένων (binary files): Περιέχουν κωδικοποιημένη πληροφορία σε δυαδική μορφή. Δεν μπορούμε να τα διαβάσουμε με έναν απλό επεξεργαστή κειμένου ή τυπώνοντάς τα στην κονσόλα του λειτουργικού συστήματος.

6 Που βρίσκονται τα αρχεία;
Τα αρχεία αποθηκεύονται στο δίσκο του συστήματος (δευτερεύουσα μνήμη) και η πληροφορία που γράφεται σε αυτά είναι μόνιμη παραμένει και μετά το σβήσιμο του υπολογιστή. Τα αρχεία οργανώνονται σε φακέλους (folders) ή αλλιώς καταλόγους (directories) ιεραρχικά στο δίσκο. Το κάθε αρχείο έχει ένα όνομα και μια διεύθυνση μονοπατιού στο δίσκο Π.χ. όνομα: ‘testfile.txt’, διεύθυνση μονοπατιού ‘C:\files\testfile.txt’.

7 Που βρίσκονται τα αρχεία;
Ένα πρόγραμμα που τρέχει στον υπολογιστή αναφέρεται σε έναν «τρέχοντα κατάλογο». Αν το πρόγραμμα δημιουργήσει ένα αρχείο, χωρίς να προσδιορίσει το φάκελό του (δηλ. δίνοντας ένα όνομα και όχι μια πλήρη διεύθυνση μονοπατιού) τότε το αρχείο γράφεται στον τρέχοντα κατάλογο. Επίσης, αν το πρόγραμμα ανοίγει και διαβάζει ένα αρχείο με βάση το όνομά του μόνο, το πρόγραμμα υποθέτει ότι το αρχείο βρίσκεται στον τρέχοντα κατάλογο.

8 Διαδικασία διαχείρισης αρχείου μέσα σε ένα πρόγραμμα
Άνοιξε το αρχείο. Διάβασε από το αρχείο ή/και γράψε σε αυτό. Κλείσε το αρχείο Το κλείσιμο δεν είναι υποχρεωτικό (μπορεί να γίνει αυτόματα στο τέλος του προγράμματος), αλλά μας βοηθάει να σιγουρευτούμε ότι το περιεχόμενου του αρχείου μας στο δίσκο συμφωνεί με τις ενέργειές μας στο πρόγραμμα.

9 «Άνοιγμα» ενός αρχείου
Γίνεται με τη συνάρτηση open(filename) Η συνάρτηση ανοίγει το αρχείο με το όνομα filename ή δίνει σφάλμα αν δεν υπάρχει αρχείο με αυτό το όνομα. μεταβλητή που δείχνει στο αντικείμενο αρχείου >>> f = open('testfile.txt') >>> f = open('testfile') Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> f = open('testfile') FileNotFoundError: [Errno 2] No such file or directory: 'testfile' μπορούμε να δώσουμε και πλήρη διεύθυνση του αρχείου στο δίσκο (π.χ. ‘C:\files\testfile.txt’)

10 «Άνοιγμα» ενός αρχείου
Το άνοιγμα ενός αρχείου αντιστοιχίζει το αρχείο σε μια μεταβλητή (αντικείμενο αρχείου). Μέσω της μεταβλητής μπορούμε να διαβάσουμε τα περιεχόμενα του αρχείου. Η open παίρνει και πρόσθετα προαιρετικά ορίσματα Αν δε βάλουμε άλλα ορίσματα, σημαίνει ότι ανοίγουμε το αρχείο για διάβασμα Μπορούμε επίσης να ανοίξουμε ένα αρχείο για γράψιμο, για προσθήκη δεδομένων μόνο, για γράψιμο και διάβασμα, για γράψιμο ή/και διάβασμα δυαδικής πληροφορίας.

11 «Άνοιγμα» ενός αρχείου
άνοιγμα για διάβασμα: το ίδιο σαν να μη βάζαμε δεύτερο όρισμα >>> f = open('testfile.txt') >>> f = open('testfile.txt','r') >>> f = open('testfile.txt','w') >>> f = open('testfile.txt','a') >>> f = open('testfile.txt','r+') >>> f = open('testfile.txt','rb') >>> f = open('testfile.txt','rb+') άνοιγμα για γράψιμο αρχικοποιεί νέο αρχείο άνοιγμα για προσθήκη στο τέλος του αρχείου (append) διάβασμα και γράψιμο διάβασμα δυαδικού αρχείου διάβασμα και γράψιμο δυαδικού αρχείου τα + και b μπορούν να προστεθούν στα r, w και a

12 Γράψιμο σε αρχείο Μέσω της μεθόδου write
άνοιγμα για γράψιμο >>> f = open('testfile.txt','w') >>> f.write('Hello, ') 7 >>> f.write('World!') 6 >>> f.close() γράψε ‘Hello, ’ γράφτηκαν 7 χαρακτήρες «κλέισιμο» αρχείου πιστοποιεί το ότι οτιδήποτε γράψαμε θα είναι στο αρχείο στο δίσκο H f.close() χρειάζεται οπωσδήποτε στην εγγραφή γιατί μπορεί ο υπολογιστής να έχει κρατήσει τα δεδομένα που θέλουμε να γράψουμε σε buffer και να μην τα έχει σώσει στο αρχείο.

13 Διάβασμα από αρχείο Μέσω της μεθόδου read
άνοιγμα για διάβασμα >>> f = open('testfile.txt', 'r') >>> >>> f.read(4) 'Hell' >>> s = f.read() >>> s 'o, World!' διάβασε 4 χαρακτήρες επιστρέφει αυτό που διάβασε διαβάζει όλα από την τρέχουσα θέση και μετά >>> f = open('testfile.txt') >>> >>> f.read(4) 'Hell' >>> s = f.read() >>> s 'o, World!' H f.close() δεν χρειάζεται οπωσδήποτε όταν διαβάζουμε ένα αρχείο.

14 Τυχαία Προσπέλαση Μπορούμε να μετακινηθούμε σε μια συγκεκριμένη θέση του αρχείου και να διαβάσουμε, ή να γράφουμε εκέι μέσω της μεθόδου seek. >>> f = open('testfile.txt','r') >>> f.seek(4) 4 >>> f.read(3) 'o, ' >>> f.tell() 7 testfile.txt πήγαινε στη θέση 4 Hello, World! >>> f = open('testfile.txt') >>> >>> f.read(4) 'Hell' >>> s = f.read() >>> s 'o, World!' επιστρέφει την τρέχουσα θέση στο αρχείο.

15 Παράδειγμα με seek και write
testfile.txt >>> f = open('testfile.txt','r+') >>> f.seek(3) 3 >>> f.write('p ') 2 >>> f.seek(0) >>> f.read() 'Help , World!' Hello, World! >>> f = open('testfile.txt') >>> >>> f.read(4) 'Hell' >>> s = f.read() >>> s 'o, World!' Help , World! testfile.txt

16 readline, readlines, writelines
>>> f = open('testfile.txt') >>> for i in range(2): print(str(i)+':', f.readline()) 0: Hello, World! 1: How are you? testfile.txt Hello, World! How are you?

17 readline, readlines, writelines
>>> f = open('testfile.txt') >>> l = f.readlines() >>> l ['Hello, World!\n', 'How are you?'] testfile.txt Hello, World! How are you? Το \n είναι ειδικός χαρακτήρας που σημαίνει «αλλαγή γραμμής».

18 readline, readlines, writelines
Η μέθοδος writelines() παίρνει μία λίστα από αλφαριθμητικά και τα γράφει στο αρχείο. Πρέπει εμείς να προσθέσουμε τα \n για να δηλώσουμε που αλλαζουν οι γραμμές. testfile.txt >>> f = open('testfile.txt') >>> l = f.readlines() >>> l[0] = 'Howdy Johnny\n' >>> f2 = open('testfile2.txt','w') >>> f2.writelines(l) >>> f2.close() Hello, World! How are you? testfile2.txt Howdy Johnny How are you?

19 Διαβάζοντας με επαναλήψεις
Μπορούμε να καλούμε τις μεθόδους read και readline επαναληπτικά μέχρι να φτάσουμε στο τέλος του αρχείου. >>> f = open('testfile.txt') >>> char = f.read(1) >>> while char: print(char,end='') char = f.read(1) Hello, World! How are you? >>> testfile.txt Hello, World! How are you? ενόσω ο τρέχων χαρακτήρας που διαβάσαμε δεν είναι κενός, που σημαίνει ότι το αρχείο δεν έχει τελειώσει.

20 Διαβάζοντας με επαναλήψεις
Μπορούμε να καλούμε τις μεθόδους read και readline επαναληπτικά μέχρι να φτάσουμε στο τέλος του αρχείου >>> f = open('testfile.txt') >>> l = f.readline() >>> while l: print(l, end='') l = f.readline() Hello, World! How are you? >>> testfile.txt Hello, World! How are you? χρειάζεται, γιατί η κάθε γραμμή περιέχει το \n στο τέλος.

21 Διαβάζοντας με επαναλήψεις
Το ίδιο με while-True / break >>> f = open('testfile.txt') >>> while True: l = f.readline() if not l: break print(l, end='') Hello, World! How are you? >>> testfile.txt αποφεύγουμε να γράψουμε το l = f.readline() δύο φορές, άρα το πρόγραμμά μας είναι πιο ευανάγνωστο Hello, World! How are you?

22 Διάβασμα όλου του αρχείου (αν είναι μικρό)
Διάβασμα όλου του αρχείου (αν είναι μικρό) Μπορούμε να διαβάσουμε «όλο» το αρχείο και να εξετάσουμε τους χαρακτήρες του έναν-έναν ή τις γραμμές μία-μία. >>> f = open('testfile.txt') >>> for char in f.read(): print(char, end='') Hello, World! How are you? >>> >>> f = open('testfile.txt') >>> for l in f.readlines(): print(l, end='') Hello, World! How are you? >>>

23 Διάβασμα γραμμή-γραμμή με χρήση for
Εναλλακτικός επαναληπτικός τρόπος διαβάσματος. για κάθε γραμμή l που διαβάζεται από το αρχείο (το read εδώ υπονοείται). >>> f = open('testfile.txt') >>> for l in f: print(l,end='') Hello, World! How are you? testfile.txt Hello, World! How are you? >>> for l in open('testfile.txt'): print(l,end='') Hello, World! How are you? πιο σύντομος τρόπος, αλλά δεν μπορούμε να κάνουμε close. Το close θα γίνει μετά το τέλος του προγράμματος/συνάρτησης.

24 list(open(filename))
Μπορoύμε να μετατρέψουμε τα περιεχόμενα του αρχείου σε λίστα χρησιμοποιώντας list(open(filename)) Αντίστοιχα με το list(range(5)). >>> l = list(open('testfile.txt')) >>> l ['Hello, World!\n', 'How are you?'] testfile.txt Hello, World! How are you?

25 Παράδειγμα >>> f = open('testfile2.txt','w')
>>> f.write('First line\n') 11 >>> f.write('Second line\n') 12 >>> f.write('Third line\n') >>> f.close() >>> first, second, third = open('testfile2.txt') >>> first 'First line\n' >>> second 'Second line\n' >>> third 'Third line\n' ανοίγει το αρχείο και διαβάσει τις γραμμές στις μεταβλητές ταυτόχρονα.

26 Άσκηση Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα όνομα αρχείου και ένα αλφαριθμητικό και θα επιστρέφει πόσες φορές εμφανίζεται το αλφαριθμητικό μέσα στο αρχείο π.χ. stringCount('testfile.txt','you') = 1. testfile.txt def stringCount(filename, s): f = open(filename) content = f.read() return content.count(s) Hello, World! How are you? διαβάζει όλο το αρχείο και βάζει τα περιεχόμενά του στο αλφαριθμητικό content.

27 Άσκηση Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα όνομα αρχείου και θα επιστρέφει τον αριθμό των λέξεων σε αυτό π.χ. wordCount('testfile.txt') = 5. testfile.txt def wordCount(filename): f = open(filename) content = f.read() return len(content.split()) Hello, World! How are you?

28 Άσκηση Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα όνομα αρχείου και θα επιστρέφει τις λέξεις του σε μια λίστα, χωρίς σημεία στίξης (!,.:;?) π.χ. words('testfile.txt') = ['Hello', 'World', 'How', 'are', 'you']. def words(filename): f = open(filename) content = f.read() lout = [] for s in content.split(): chars = list(s) l = [] for c in chars: if c not in '!,.:;?': l.append(c) lout.append(''.join(l)) return lout testfile.txt Hello, World! How are you?

29 Άσκηση Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα όνομα αρχείου και θα επιστρέφει τις λέξεις του σε μια λίστα, χωρίς σημεία στίξης (!,.:;?) π.χ. words('testfile.txt') = ['Hello', 'World', 'How', 'are', 'you’] Με χρήση translate. testfile.txt Hello, World! How are you? def words(filename): trantab = str.maketrans('!,.:;?', ' ') f = open(filename) content = f.read() newcontent = content.translate(trantab) return newcontent.split() δημιουργεί πίνακα μετάφρασης trantab, που αντιστοιχίζει κάθε σημείο στίξης σε ένα διάστημα. «μεταφράζει» το content με βάση το trantab.

30 Άσκηση Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα όνομα αρχείου και ένα αλφαριθμητικό και θα τυπώνει τις γραμμές του αρχείου που περιέχουν το αλφαριθμητικό π.χ. grep('testfile.txt','are') >>> How are you? def grep(filename, w): for l in open(filename): if w in l: print(l,end='') testfile.txt Hello, World! How are you?

31 close και flush Όταν ανοίγουμε ένα αρχείο για γράψιμο και γράφουμε σε αυτό, οι αλλαγές στο αρχείο γίνονται πρώτα στη μνήμη του υπολογιστη: δεν υπάρχει εγγύσηση ότι το αρχείο στο δίσκο έχει αλλάξει. Η f = open(‘filename’,’w’) δε δημιουργεί το αρχείο στο δίσκο απ’ ευθείας Η f.write(‘something’) δεν γράφει απ’ευθείας στο αρχείο του δίσκου. Οι αλλαγές γίνονται σε ένα buffer της μνήμης. Η f.close() γράφει όλα τα δεδομένα του buffer στο αρχείο και κλείνει το αρχείο. Η f.flush() γράφει όλα τα δεδομένα του buffer στο αρχείο χωρίς να το κλείσει.

32 Άσκηση: openLog Γράψτε μια συνάρτηση, openLog() η οποία θα ανοίγει ένα αρχείο (όπως η open()) και θα καταγράφει σε ένα αρχείο log.txt το ιστορικό των ανοιγμάτων αρχείων μέσω της openLog(). Παράδειγμα επιθυμητής συμπεριφοράς: >>> f = openLog('testfile.txt','r’) log.txt Wednesday Dec/03/14 12:38 PM: File testfile.txt opened.

33 Άσκηση: openLog, βήμα 1 Ας αρχίσουμε από το βασικό: θέλουμε η openLog() να κάνει ότι και η open() : Είναι εντάξει το παραπάνω; ΟΧΙ: def openLog(filename, mode): f = open(filename, mode) return f def openLog(filename, mode = 'r'): f = open(filename, mode) return f

34 Άσκηση: openLog, βήμα 2 Θέλουμε η openLog() να γράφει στο τέλος του αρχείου log.txt το ότι ανοίξαμε το αρχείο: Αυτό που μένει είναι να γράψουμε το χρόνο. def openLog(filename, mode='r'): f = open(filename, mode) logfile = open('log.txt', 'a') logfile.write('File %s opened.\n' % filename) logfile.close() return f

35 time module Το module time έχει μεθόδους προσπέλασης του χρόνου
η μέθοδος time() επιστρέφει τον αριθμό των δευτερολέπτων που έχουν περάσει από τη στιγμή epoch epoch: 00:00:00 of Jan. 1, 1970 >>> import time >>> time.time() >>> time.gmtime(0) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0) >>> time.localtime() time.struct_time(tm_year=2014, tm_mon=12, tm_mday=3, tm_hour=13, tm_min=37, tm_sec=35, tm_wday=2, tm_yday=337, tm_isdst=0) epoch τοπική ώρα

36 time module Η μέθοδος strftime μετατρέπει ένα αντικείμενο χρόνου σε ένα κατανοητό αλφαριθμητικό. >>> time.strftime('%A %b/%d/%y %I:%M %p', time.localtime()) 'Tuesday Mar/16/10 02:06 PM'

37 time module Η μέθοδος strftime μετατρέπει ένα αντικείμενο χρόνου σε ένα κατανοητό αλφαριθμητικό.

38 Άσκηση: openLog, βήμα 3 Θέλουμε η openLog() να γράφει στο τέλος του αρχείου log.txt το ότι ανοίξαμε το αρχείο και πότε το κάναμε: def openLog(filename, mode='r'): import time f = open(filename, mode) logfile = open('log.txt', 'a') opentime = time.strftime('%A %b/%d/%y %I:%M %p', time.localtime()) logfile.write('%s: File %s opened.\n' % (opentime, filename)) logfile.close() return f

39 Τέλος Ενότητας

40 Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Ιωαννίνων» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

41 Σημειώματα

42 Σημείωμα Ιστορικού Εκδόσεων Έργου
Το παρόν έργο αποτελεί την έκδοση 1.0. Έχουν προηγηθεί οι κάτωθι εκδόσεις: Έκδοση 1.0 διαθέσιμη εδώ.

43 Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Ιωαννίνων, Διδάσκων: Ν. Μαμουλής. «Εισαγωγή στον Προγραμματισμό. Αρχεία». Έκδοση: 1.0. Ιωάννινα Διαθέσιμο από τη δικτυακή διεύθυνση:

44 Σημείωμα Αδειοδότησης
Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού - Παρόμοια Διανομή, Διεθνής Έκδοση 4.0 [1] ή μεταγενέστερη. [1]


Κατέβασμα ppt "ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google