Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Εργαλεία ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ FILE & PROCESS HANDLING

Σχετικά έγγραφα
File Handling & I/O ΓΛΩΣΣΙΚΉ ΤΕΧΝΟΛΟΓΊΑ

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

ΔΙΑΧΕΙΡΙΣΗ ΠΕΡΙΕΧΟΜΕΝΟΥ ΠΑΓΚΟΣΜΙΟΥ ΙΣΤΟΥ ΚΑΙ ΓΛΩΣΣΙΚΑ ΕΡΓΑΛΕΙΑ. Τεχνικές NLP Σχεδιαστικά Θέματα

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

Μεθόδων Επίλυσης Προβλημάτων

Γλωσσική Τεχνολογία. Εισαγωγικό Φροντιστήριο

Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Εργαλεία ΕΙΣΑΓΩΓΙΚΟ ΦΡΟΝΤΙΣΤΗΡΙΟ

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

Εργαστήριο 9: Αρχεία

PERL. Δήμος Παύλου Δημήτρης Κουζαπάς

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

Λειτουργικά Συστήματα (Λ/Σ)

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Διάλεξη 18η: Διαχείρηση Αρχείων

Λειτουργικά Συστήματα (Λ/Σ)

Σημειωματάριο Δευτέρας 20 Νοε. 2017

Λειτουργικό Σύστημα: διαχείριση πόρων. Τι είναι ένα αρχείο ; Διαχείριση αρχείων. Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

ΠΛΗΡΟΦΟΡΙΚΗ Ι (Python) Ενότητα 6. Αρχεία (Files)

Λειτουργικό Σύστημα: διαχείριση πόρων. Διαχείριση αρχείων. Τι είναι ένα αρχείο ; Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

5 η Διάλεξη Python - Αρχεία

Πληροφορική ΙΙ Θεματική Ενότητα 13

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

3ο Εργαστήριο Βασικές εντολές διαχείρισης αρχείων σε LINUX

Σημειωματάριο Τετάρτης 25 Οκτ. 2017

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ιαφάνειες παρουσίασης #6 (β)

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

Βασικά Στοιχεία Python 3

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

Διαδικασιακός Προγραμματισμός

Ενδεικτική περιγραφή μαθήματος

Εισαγωγή στην Γλώσσα Προγραμματισμού Python. 12/10/16 1

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

Γραφικά υπολογιστών Εργαστήριο 4 Εισαγωγή στις λίστες

S, (5, -3, 34, -23, 7) ( *, _

Εισαγωγικό Φροντιστήριο

Αρχεία και Ρεύματα. Αρχεία

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στο Λ.Σ. UNIX

Προγραμματισμός Η/Υ (ΤΛ2007 )

Κεφάλαιο 12: Είσοδος και έξοδος δεδομένων σε αρχεία

Μετατροπή χαρακτήρων ASCII σε αριθμό (atoi) & διάβασμα, και αποθήκευση του περιεχομένου του στη μνήμη. (Διάλεξη. Πανεπιστήμιο Κύπρου

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

Αντικειμενοστρεφής Προγραμματισμός

HY150a Φροντιστήριο 3 24/11/2017

Εισαγωγή στον Προγραμματισμό Μάθημα 1: Βασική Πλοήγηση σε Linux CLI. Οκτώβριος 2016 Χ. Αλεξανδράκη

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

Πληροφορική 2. Δομές δεδομένων και αρχείων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Δείκτες σε συναρτήσεις. Προγραμματισμός II 1

Χειρισµός Σφαλµάτων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση:

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Προγραμματισμός Διαχείρισης Συστημάτων Ι

Οργάνωση ενός σύγχρονου Υπολογιστικού Συστήματος ή Ηλεκτρονικού Υπολογιστή (Η/Υ) Τα σύγχρονα συστήματα Η/Υ έχουν την παρακάτω οργάνωση:

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Αρχεία Δεδομένων. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Αρχιτεκτονική Υπολογιστών

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ

Προγραμματισμός συστημάτων UNIX/POSIX

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Βιβλιοθήκη stdio. Προγραμματισμός II 1

Εισαγωγή στην Επιστήμη της Πληροφορικής Εργαστήριο. UNIX Μέρος 1

ΕΠΕΞΕΡΓΑΣΙΑ ΑΡΧΕΙΩΝ Λέµε αρχείο

Εξαιρέσεις Εισαγωγή. Εξαιρέσεις. ηµήτρης Λεβεντέας

Σημειωματάριο Δευτέρας 30 Οκτ. 2017

Βιβλιοθήκη stdio. Προγραμματισμός II 1

Αρχεία & Ρεύματα ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ. Γεώργιος Παπαϊωάννου ( ) gepap@aueb.gr

Κεφάλαιο 4. Λογισμικό Συστήματος

Σύστηµα Αρχείων και Καταλόγων

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

Εισαγωγή στα Λειτουργικά Συστήματα (Λ/Σ) Το UNIX και οι εντολές του Παρουσίαση 3

Λειτουργικά Συστήματα Κεφάλαιο 2 Οργάνωση Συστήματος Αρχείων 2.1 Διαχείριση Αρχείων και Σύστημα Αρχείων(File System)

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Κατακερματισμός. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Περιεχόμενα. Πρόλογος... 21

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης

Δίκτυα Η/Υ στην Επιχείρηση

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

File Management και I/O στο UNIX

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Γλωσσική Τεχνολογία. String Handling Regular Expressions

Προγραμματισμός Υπολογιστών με C++

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

String Handling ΓΛΩΣΣΙΚΉ ΤΕΧΝΟΛΟΓΊΑ

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΤΕΙΘ ΣΤΕΦ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ (UNIX) ΕΡΓΑΣΤΗΡΙΟ. 6o ΕΡΓΑΣΤΗΡΙΟ

Δομημένος Προγραμματισμός

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

Transcript:

Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Εργαλεία ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ FILE & PROCESS HANDLING

Επιλογή δομής δεδομένων Κριτήρια: Μέγεθος του προβλήματος Πως θα χρησιμοποιηθεί Ενέργειες που καθορίζουν το κόστος: Lookup: αναζήτηση/έλεγχος ύπαρξης δεδομένων στη δομή. Insert: εισαγωγή δεδομένων στη δομή.

Συνήθεις κλάσεις Οι νεότερες γλώσσες προγραμματισμού προσφέρουν συνήθως δύο βασικές κλάσεις: Dictionary Δυναμικού μεγέθους. Κάθε εγγραφή είναι του τύπου <key, value>. Το κλειδί εισάγεται σε hashtable. Οι εγγραφές δεν ταξινομούνται. List: Δυναμικού μεγέθους. Κάθε εγγραφή είναι μόνο value. Δεν υπάρχει οργάνωση. Υποστηρίζει κλήσεις ταξινόμησης.

Υπέρ-Κατά Dictionaries: Πολύ γρήγορα lookups. Πιο αργή προσθήκη εγγραφών (hashing process). Για να ταξινομηθεί πρέπει να εξαχθεί η λίστα των κλειδιών. Lists: Αργά lookups. Συνήθως γίνεται σειριακή αναζήτηση. Γρήγορη προσθήκη εγγραφών. Μπορεί να ταξινομηθεί.

Κριτήρια: Τι χρησιμοποιούμε? Πόσες θα είναι οι εγγραφές? Πχ για < 10 δεν αξίζει το κόστος του hashing. Πόσο συχνά θα ψάχνουμε στη δομή? Πχ αν σε κάθε insert αντιστοιχεί και ένα lookup ή περισσότερο το hashing συμφέρει. Θα ταξινομήσουμε? Αν και οι περισσότερες γλώσσες υποστηρίζουν απευθείας μετατροπή των κλειδιών του Dictionary σε λίστα για να γίνει ταξινόμηση. Πως επιλέγουμε? Μαντεύοντας. Ο γενικός κανόνας είναι rule of thumb. Κάθε πρόβλημα είναι διαφορετικό και μέχρι να το δεις να δουλεύει δεν ξέρεις με σιγουριά.

Python - Lists list.sort() Ταξινόμηση λίστας list.reverse() Αντιστροφή στοιχείων λίστας

Python - Lists as stacks list.append() Προσθήκη στο τέλος της λίστας list.pop() Αφαίρεση από το τέλος της λίστας

Python List Comprehensions

Python - Dictionaries

Το module os Διαχείριση Paths import os Module για την διαχείρηση αρχείων και φακέλων. Είναι cross-platform!! os.path.join(path1[, path2[,...]]) Συνένωση μονοπατιών. π.χ: os.path.join("c:\\music\\ap", "mahadeva.mp3") Παρατηρείστε την έλλειψη \. Το αποτέλεσμα είναι σωστό!! Προστίθεται από μόνο του!! os.join.expanduser(~) Μεταφορά στον home folder ανάλογα με το ΛΣ. HOME (linux) My Documents (Windows)

Το module os Διαχείριση Paths os.path.split(path) Επιστρέφει ένα tuple της μορφής (head, tail) όπου head το path μέχρι το τελευταίο / και tail ότι το ακολουθεί. π.χ.: (filepath, filename) = os.path.split("c:\\music\\ap\\mahadeva.mp3") filepath = 'c:\\music\\ap' filename = 'mahadeva.mp3'

Το module os Διαχείριση Paths os.path.splitext(path) Επιστρέφει ένα tuple της μορφής (root, ext) όπου root το filename και ext η κατάληξη. π.χ.: (shortname, extension) = os.path.splitext(filename) shortname = 'mahadeva' extension = '.mp3'

Το module os Αρχεία & Φάκελοι os.path.isfile(path) Επιστρέφει boolean τιμή ανάλογα με το όρισμα. os.path.isdir(path) Επιστρέφει boolean τιμή ανάλογα με το όρισμα. os.listdir(path) Επιστρέφει μία λίστα με τα περιεχόμενα του φακέλου που δίνεται ως όρισμα. Χρήσιμα list comprehensions: [f for f in os.listdir('/bin') if os.path.isfile(os.path.join('/bin',f))] [f for f in os.listdir('/bin') if os.path.isdir(os.path.join('/bin',f))]

Το module os Κλήση Διεργασιών os.system(command) Εκτέλεση εξωτερικής διεργασίας. Η παράμετρος command πρόκειται για ένα string που καλεί στην ουσία ένα εξωτερικό πρόγραμμα. π.χ.: os.system( ls ) Ως επιστρεφόμενη τιμή, λαμβάνεται το exit status της διεργασίας. Η υλοποίηση της παραπάνω συνάρτησης γίνεται μέσω της αντίστοιχης συνάρτησης system() της C και ακολουθείται γενικά το πρότυπο POSIX.

Το module os Κλήση Διεργασιών os.popen(command[, mode[, bufsize]]) Κλήση εξωτερικής διεργασίας μέσω του command Επιστρέφει file handler: μπορείτε να ανοίξετε ρεύμα ανάγνωσης του stdout ή εγγραφής στο stdin Πχ f=os.popen( ls ~ ) output = f.read() f.close() print output FYI: στις νεότερες εκδόσεις της python, η χρήση της αντικαθίσταται από το subprocess module

import glob Το module glob I Ανάκτηση full paths με χρήση wildcart. Παραδείγματα: glob.glob('c:\\music\\_singles\\*.mp3') ['c:\\music\\_singles\\a_time_long_forgotten_con.mp 3', 'c:\\music\\_singles\\hellraiser.mp3', 'c:\\music\\_singles\\kairo.mp3', 'c:\\music\\_singles\\long_way_home1.mp3', 'c:\\music\\_singles\\sidewinder.mp3', 'c:\\music\\_singles\\spinning.mp3']

Το module glob II glob.glob('c:\\music\\_singles\\s*.mp3') ['sidewinder.mp3', 'spinning.mp3'] glob.glob('c:\\music\\*\\*.mp3') Θα επιστρέψει μία λίστα με όλα τα mp3s που περιέχονται σε όλους τους υποφακέλους του φακέλου music!!

open(filename, mode) Άνοιγμα αρχείων Το πρώτο όρισμα είναι τύπου string και περιέχει το όνομα του αρχείου (ή και το path κάτω από το οποίο αυτό υπάρχει). Το δεύτερο όρισμα είναι επίσης τύπου string και υποδηλώνει τον τρόπο με τον οποίο θα χρησιμοποιηθεί το αρχείο. 'r' (read - default) 'w' (write) 'a' (append) 'r+' (both read/write)

Ανάγνωση περιεχομένου Ι f.read(size) Η παράμετρος size είναι προεραιτική και υποδηλώνει πόσα bytes θα διαβαστούν από το αρχείο f (file object). Είναι ευθύνη του προγραμματιστή να καθορίσει την τιμή της size. Αν δεν δοθεί τιμή, η read διαβάζει ολόκληρο το περιεχόμενο!! Μεγάλη προσοχή στην χρήση της!! Η μνήμη δεν είναι άπειρη... Στο τέλος του αρχείου επιστρέφει empty string

Ανάγνωση περιεχομένου ΙΙ f.readline() Ανάγνωση μίας γραμμής από το αρχείο. Ως delimeter χρησιμοποιείται ο χαρακτήρας νέας γραμμής ('\n'). Το επιστρεφόμενο string περιέχει τον χαρακτήρα νέας γραμμής εκτός και αν πρόκειται για το τέλος του αρχείου, το οποίο δεν τελειώνει με νέα γραμμή!! Προσοχή στην επιστρεφόμενη τιμή!! Ένα κενό string είναι το τέλος του αρχείου ενώ ένα string της μορφής '\n' είναι μία κενή γραμμή!!

Ανάγνωση περιεχομένου ΙΙΙ f.readlines(sizehint) Επιστρέφει μία λίστα, όπου κάθε στοιχείο της είναι μία γραμμή του αρχείου. Η παράμετρος sizehint είναι προεραιτική και συνίσταται για πραγματικά μεγάλα αρχεία, με σκοπό την καλύτερη διαχείρηση μνήμης. Αναφέρεται σε bytes, αλλά η συνάρτηση θα επιστρέψει μόνο ολόκληρες γραμμές. Η καλύτερη προσέγγιση!! (so far..)

Ανάγνωση περιεχομένου ΙV for line in f: print line Απλοϊκή προσέγγιση Προσπέλαση ανά γραμμή χωρίς την χρήση συνάρτησης. Διαφορετικό buffering στην μνήμη!! Δεν πρέπει να χρησιμοποιείται σε συνδυασμό με τις προηγούμενες μεθόδους. Καλύτερη διαχείριση μνήμης (streaming)

Εγγραφή f.write(string) Τόσο απλά!! Για εγγραφή άλλου τύπου δεδομένων, π.χ. int, πρέπει να γίνει πρώτα μετατροπή σε string, π.χ.: a = 5 s = str(a) f.write(s) Hint: Προσοχή κατά την αντίστοιχη ανάκτηση και χρήση αριθμών από αρχεία. Πρέπει να γίνει μετατροπή σε int πριν την χρήση τους σε μαθηματικές πράξεις..

f.tell() Προσπέλαση περιεχομένου Επιστρέφει έναν int που δείχνει σε ποιο byte (ξεκινώντας απ'την αρχή του αρχείου) βρίσκεται η προσπέλαση. f.seek(offset, from_what) Ρητή αλλαγή στην θέση του δείκτη. Η παράμετρος offset υποδηλώνει τα bytes που προστίθενται στην from_what για την μετακίνησή του κάθε φορά. Η παράμετρος from_what υποδηλώνει την θέση του δείκτη. 0 (απ'την αρχή του αρχείου - default) 1 (απ'την τρέχουσα θέση του μέσα στο αρχείο) 2 (από το τέλος του αρχείου)

Κλείσιμο αρχείων f.close() Τόσο απλά!! Όταν τελειώσουμε με το αρχείο εκτελούμε την παραπάνω εντολή για την αποδέσμευση μνήμης και την αποφυγή περίεργων καταστάσεων...

Exceptions Ι Κατά το άνοιγμα/κλείσιμο ή κατά την ανάγνωση/ εγγραφή ενός αρχείου οτιδήποτε μπορεί να πάει στραβά.. ( Νόμος του Murphy για το I/O. ) Χρησιμοποιούμε χειρισμό εξαιρέσεων για την αποφυγή βίαιου τερματισμού της εκτέλεσης του προγράμματός μας. Ο τύπος exception που γίνεται throw σε αυτές τις περιπτώσεις είναι ο IOError.

Exceptions ΙΙ Γενική μορφή try block: try:... except IOError: pass finally:...

Παράδειγμα: try: f = open(path,mode) f.readlines()... except IOError: pass finally: f.close() Exceptions ΙΙI