Byte of Python - Ελληνική Έκδοση

Είσοδος / έξοδος

Εισαγωγή

Θα υπάρξουν καταστάσεις όπου το πρόγραμμά σας πρέπει να αλληλεπιδράσει με το χρήστη. Για παράδειγμα, θα θέλετε να πάρετε είσοδο από το χρήστη και μετά να τυπώσετε πίσω μερικά αποτελέσματα. Μπορούμε να το επιτύχουμε αυτό χρησιμοποιώντας αντίστοιχα τις συναρτήσεις input() και print().

Για έξοδο μπορούμε να χρησιμοποιήσουμε τις διάφορες μεθόδους της κλάσης str (string). Για παράδειγμα, μπορείτε να χρησιμοποιήσετε τη μέθοδο rjust για να πάρετε μια συμβολοσειρά, η οποία είναι δεξιά στοιχισμένη (right justified) σε ένα καθορισμένο εύρος. Κοιτάξτε τη help(str) για περισσότερες λεπτομέρειες.

Ένας ακόμα συνηθισμένος τύπος εισόδου/εξόδου είναι ο χειρισμός των αρχείων (files). Η ικανότητα να δημιουργείτε, διαβάζετε και να γράφετε αρχεία είναι βασική σε πολλά προγράμματα και θα εξερευνήσουμε αυτή την πτυχή σε αυτό το κεφάλαιο.

Είσοδος από το χρήστη

#!/usr/bin/python
# user_input.py

def reverse(text):
    return text[::-1]

def is_palindrome(text):
    return text == reverse(text)

something = input('Enter text: ')
if (is_palindrome(something)):
    print("Yes, it is a palindrome")
else:
    print("No, it is not a palindrome")

Έξοδος:

$ python user_input.py
Enter text: sir
No, it is not a palindrome

$ python user_input.py
Enter text: madam
Yes, it is a palindrome

$ python user_input.py
Enter text: racecar
Yes, it is a palindrome

Πώς δουλεύει:

Χρησιμοποιούμε τον τεμαχισμό (κομμάτιασμα) για να αναστρέψουμε το κείμενο. Έχουμε ήδη δει πώς μπορούμε να κάνουμε κομμάτια από ακολουθίες, χρησιμοποιώντας τον κώδικα seq[a:b], αρχίζοντας από τη θέση a μέχρι τη θέση b. Μπορούμε επίσης να δώσουμε ένα τρίτο όρισμα το οποίο προσδιορίζει το βήμα με το οποίο γίνεται το κομμάτιασμα. Το προκαθορισμένο βήμα είναι το 1 εξαιτίας του οποίου επιστρέφει ένα συνεχές τμήμα του κειμένου. Δίνοντας ένα αρνητικό βήμα δηλ. -1, θα επιστρέψει το κείμενο ανάστροφα.

Η συνάρτηση input() παίρνει μια συμβολοσειρά σαν όρισμα και το παρουσιάζει στον χρήστη.Τότε περιμένει το χρήστη να τυπώσει κάτι και να πιέσει το return. Άπαξ και ο χρήστης έχει εισάγει κάτι, η συνάρτηση input() τότε θα επιστρέψει αυτό το κείμενο.

Παίρνουμε αυτό το κείμενο και το αναστρέφουμε. Εάν το αυθεντικό κείμενο και το ανεστραμμένο είναι ίσα, τότε το κείμενο είναι ένα παλίνδρομο.

Εργασία για το σπίτι:

Ο έλεγχος εάν ένα κείμενο είναι παλίνδρομο θα έπρεπε επίσης να αγνοεί τη στίξη, τα διαστήματα και τα κεφαλαία. Για παράδειγμα, το κείμενο "Rise to vote, sir" είναι παλίνδρομο, αλλά το τρέχον πρόγραμμά μας δεν το λέει. Μπορείτε να αναπτύξετε το ανωτέρο πρόγραμμα για να το αναγνωρίσει σαν παλίνδρομο;

Αρχεία

Μπορείτε να ανοίξετε και να χρησιμοποιήσετε αρχεία για διάβασμα ή γράψιμο, δημιουργώντας ένα αντικείμενο της κλάσης file και χρησιμοποιώντας τις μεθόδους της, read, readline ή write κατάλληλα για να διαβάσει από ή να γράψει στο αρχείο. Η ικανότητα να διαβάζει ή να γράφει στο αρχείο εξαρτάται από τον τρόπο (mode) που έχετε καθορίσει για το άνοιγμα του αρχείου. Τότε τελικά, όταν τελειώσετε με το αρχείο, καλείτε τη μέθοδο close, να πει στην Python ότι τελειώσαμε με τη χρήση του αρχείου.

Παράδειγμα:

#!/usr/bin/python
# Filename: using_file.py

poem = '''\
Programming is fun
When the work is done
if you wanna make your work also fun:
    use Python!
'''

f = open('poem.txt', 'w') # open for 'w'riting
f.write(poem) # write text to file
f.close() # close the file

f = open('poem.txt') # if no mode is specified, 'r'ead mode is assumed by default
while True:
    line = f.readline()
    if len(line) == 0: # Zero length indicates EOF
        break
    print(line, end='')
f.close() # close the file

Έξοδος:

Αρχικά ανοίγετε ένα αρχείο χρησιμοποιώντας την ενσωματωμένη συνάρτηση open καθορίζοντας την ονομασία του αρχείου και τον τρόπο με τον οποίο θέλουμε να ανοίγει το αρχείο. Ο τρόπος μπορεί να είναι με διάβασμα ('r', read mode), με γράψιμο ('w', write mode) ή με πρόσθεση ('a', append mode). Μπορούμε επίσης να χειριστούμε ένα αρχείο κειμένου ('t', text file) ή ένα δυαδικό αρχείο ('b', binary file). Στην πραγματικότητα υπάρχουν πάρα πολλοί τρόποι διαθέσιμοι και η help(open) θα σας δώσει περισσότερες λεπτομέρειες γι αυτούς. Από προεπιλογή η open() θεωρεί το αρχείο ως αρχείο κειμένου ('t'ext file) και το ανοίγει με τον τύπο 'r'ead.

Στο δικό μας παράδειγμα, αρχικά ανοίγουμε το αρχείο σε εγγραφή και χρησιμοποιούμε τη μέθοδο write του αντικειμένου του αρχείου, για να γράψουμε στο αρχείο και τότε τελικά κλείνουμε (close) το αρχείο.

Κατόπιν ανοίγουμε το ίδιο αρχείο πάλι για ανάγνωση. Δε χρειάζεται να καθορίσουμε έναν τύπο, γιατί η «ανάγνωση» είναι ο προκαθορισμένος τρόπος. Διαβάζουμε κάθε γραμμή του αρχείου χρησιμοποιώντας τη μέθοδο readline σε βρόχο. Αυτή η μέθοδος επιστρέφει μια ολοκληρωμένη γραμμή περιλαμβάνοντας το χαρακτήρα νέας γραμμής (newline character) στο τέλος της γραμμής. Όταν μια άδεια συμβολοσειρά επιστρέφεται, σημαίνει ότι έχουμε φθάσει στο τέλος του αρχείου και «ξεφεύγουμε» (break) από το βρόχο.

Από προεπιλογή η συνάρτηση print() τυπώνει το κείμενο καθώς και μια αυτόματη νέα γραμμή (newline) στην οθόνη. Καταστέλλουμε τη νέα γραμμή καθορίζοντας end='', διότι η γραμμή που διαβάζεται από το αρχείο ήδη τελειώνει με ένα χαρακτήρα νέας γραμμής. Τότε, τελικά κλείνουμε (close) το αρχείο.

Τώρα, ελέγξτε τα περιεχόμενα του αρχείου poem.txt, για να επιβεβαιώσετε ότι το πρόγραμμα έχει πραγματικά γραφτεί και διαβαστεί από αυτό το αρχείο.

Pickle

Η Python παρέχει ένα πρότυπο άρθρωμα που ονομάζεται pickle και χρησιμοποιώντας το μπορείτε να αποθηκεύετε οποιοδήποτε αντικείμενο της Python σε ένα αρχείο και αργότερα να το παίρνετε πίσω. Αυτό ονομάζεται επίμονη αποθήκευση του αντικειμένου (persistence).

Παράδειγμα:

#!/usr/bin/python
# Filename: pickling.py

import pickle

# the name of the file where we will store the object
shoplistfile = 'shoplist.data'
# the list of things to buy 
shoplist = ['apple', 'mango', 'carrot']

# Write to the file
f = open(shoplistfile, 'wb')
pickle.dump(shoplist, f) # dump the object to a file
f.close()

del shoplist # destroy the shoplist variable

# Read back from the storage
f = open(shoplistfile, 'rb')
storedlist = pickle.load(f) # load the object from the file
print(storedlist)

Έξοδος:

$ python pickling.py
['apple', 'mango', 'carrot']

Πώς δουλεύει:

Για να αποθηκεύσουμε ένα αντικείμενο σε ένα αρχείο, πρέπει αρχικά να ανοίξουμε (open) το αρχείο με τρόπο 'w'rite 'b'inary και μετά να καλέσουμε τη συνάρτηση dump του αρθρώματος pickle. Αυτή η διαδικασία ονομάζεται pickling.

Κατόπιν, ανακτούμε το αντικείμενο χρησιμοποιώντας τη συνάρτηση load του αρθρώματος pickle, η οποία επιστρέφει το αντικείμενο. Αυτή η διαδικασία ονομάζεται unpickling.

Σύνοψη

Έχουμε συζητήσει διάφορους τύπους εισόδου/εξόδου, καθώς επίσης διαχείριση αρχείου και χρήση του αρθρώματος pickle.

Στη συνέχεια θα εξερευνήσουμε την έννοια των εξαιρέσεων (exceptions).