Θέμα Jannah Η άδεια δεν είναι επικυρωμένη. Μεταβείτε στη σελίδα επιλογών θέματος για να επικυρώσετε την άδεια χρήσης, Χρειάζεστε μία άδεια για κάθε όνομα τομέα.

Πώς να χρησιμοποιήσετε τη συνάρτηση open στην Python για ανάγνωση και εγγραφή αρχείων

8 τρόποι χρήσης της συνάρτησης Open() στην Python

Είναι μια συνάρτηση open() Ένα από τα πιο ευρέως χρησιμοποιούμενα εργαλεία στην Python, είναι το κλειδί για τον χειρισμό αρχείων, είτε πρόκειται για ανάγνωση, γραφή είτε για τροποποίηση. Χάρη στην απλότητα και την ευελιξία του, οι προγραμματιστές μπορούν να εκτελέσουν πολλές λειτουργίες σε αρχεία κειμένου ή δυαδικά αρχεία σε λίγα μόνο βήματα.

python-logo-over-blurred-python-code-background-with-the-word-python-written-in-yellow-underneath Πώς να χρησιμοποιήσετε τη συνάρτηση Open στην Python για ανάγνωση και εγγραφή αρχείων

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

Η συνάρτηση open στην Python θα πρέπει να είναι η πρώτη σας επιλογή όταν διαβάζετε τα περιεχόμενα ενός αρχείου. Δώστε της ένα όνομα αρχείου και θα λάβετε ένα ευέλικτο αντικείμενο που σας επιτρέπει να διαβάζετε και να γράφετε δεδομένα, είτε σε απλό κείμενο είτε σε δυαδική μορφή.

Αυτά τα παραδείγματα καταδεικνύουν πόσο ευέλικτη είναι αυτή η λειτουργία, με υποστήριξη για διαφορετικές λειτουργίες, προσωρινή αποθήκευση, κωδικοποίηση και πολλά άλλα.

Άνοιγμα αρχείου και ανάγνωση των περιεχομένων του

Η συνάρτηση open() έχει μια μάλλον σύνθετη υπογραφή, αλλά στην απλούστερη περίπτωση, μπορείτε να τη χρησιμοποιήσετε για να ανοίξετε ένα αρχείο κειμένου όπως αυτό:

f = open(filename)

Από προεπιλογή, η Python ανοίγει αυτό το αρχείο σε λειτουργία ανάγνωσης, που σημαίνει ότι μπορείτε μόνο να διαβάσετε από αυτό. Αυτό είναι ιδανικό για αρχεία ρυθμίσεων, αρχεία στατικών δεδομένων και άλλα. Επίσης, καθιστά αυτή τη συνηθισμένη περίπτωση συνοπτική και εύκολη στην απομνημόνευση.

Η συνάρτηση open() επιστρέφει ένα αντικείμενο αρχείου που μπορείτε να χρησιμοποιήσετε για να εκτελέσετε διάφορες εργασίες, συμπεριλαμβανομένης της ανάγνωσης ολόκληρου του περιεχομένου ενός αρχείου:

f = open("/usr/share/dict/words")
text = f.read()
print(text)

file-not-exist Πώς να χρησιμοποιήσετε τη συνάρτηση open στην Python για ανάγνωση και εγγραφή αρχείων

Σημειώστε ότι αυτό το απλό απόσπασμα θα προκαλέσει την Python να ενεργοποιήσει μια εξαίρεση εάν το αρχείο δεν υπάρχει:

Το μόνο αρχείο που είναι εγγυημένο είναι το σενάριο που εκτελείτε, το οποίο η Python καθιστά διαθέσιμο στην ειδική μεταβλητή __file__. Αυτό διευκολύνει τη σύνταξη ενός σεναρίου που εκτυπώνει τον δικό του πηγαίο κώδικα, γνωστό και ως κυνήγι:

f = open(__file__)
text = f.read()
print(text)

quine Πώς να χρησιμοποιήσετε τη συνάρτηση open στην Python για ανάγνωση και εγγραφή αρχείων

Ειδοποίηση
Αν είσαι πολύ αυστηρός, δεν είναι απολύτως αλήθεια, επειδή η ανάγνωση ενός αρχείου θεωρείται απάτη.

Χρησιμοποιήστε τη λέξη-κλειδί with για να κλείσετε αυτόματα ένα αρχείο

Όταν η Python ανοίγει ένα αρχείο, κατανέμει πόρους συστήματος σε αυτό το αρχείο, τους οποίους στη συνέχεια χρησιμοποιεί για μελλοντικές λειτουργίες, όπως ανάγνωση και εγγραφή. Εάν το πρόγραμμά σας συνεχίσει να εκτελείται, η Python θα καθαρίσει αυτούς τους πόρους, καθιστώντας τους διαθέσιμους σε άλλες διεργασίες που ενδέχεται να εκτελούνται στο σύστημά σας. Ωστόσο, αυτό δεν είναι εγγυημένο, επομένως θα πρέπει πάντα να διασφαλίζετε ότι οι πόροι καθαρίζονται σωστά. Ο απλούστερος τρόπος για να το κάνετε αυτό είναι να καλέσετε ρητά τη συνάρτηση close() στο αρχείο σας όταν ολοκληρώσετε την εργασία σας σε αυτό:

f = open("/usr/share/dict/words")
text = f.read()
f.close()

Συμβουλή
Βεβαιωθείτε ότι έχετε κλείσει το αρχείο το συντομότερο δυνατό. Για παράδειγμα, εάν ανοίξετε ένα αρχείο, διαβάσετε το περιεχόμενό του και στη συνέχεια το επεξεργαστείτε, προσπαθήστε να το κλείσετε αμέσως μετά την ανάγνωσή του. Δεν χρειάζεται να διατηρείτε το αρχείο ανοιχτό κατά την επεξεργασία δεδομένων που διαβάζετε σε μια μεταβλητή.

Διαβάστε επίσης:  Ποια είναι η κανονική θερμοκρασία για μια GPU gaming;

Αλλά μπορεί να προκύψουν προβλήματα: Τι γίνεται αν η κλήση close() δεν λειτουργεί σωστά; Για να το παρακάμψετε αυτό, χρησιμοποιήστε τη λέξη-κλειδί with. Αυτό δημιουργεί έναν διαχειριστή περιβάλλοντος για το μπλοκ που ενσωματώνει, διασφαλίζοντας ότι οι πόροι του αρχείου ελευθερώνονται:

with open("/usr/share/dict/words") as f:
    text = f.read()

Αντιγραφή αρχείου με ανάγνωση και γραφή

Διάφορες βιβλιοθήκες Python παρέχουν μεθόδους για την αντιγραφή ενός αρχείου, επομένως αυτό το παράδειγμα είναι καθαρά ενδεικτικό. Δείχνει τη χρήση του δεύτερου ορίσματος για το open, mode. Αυτό το όρισμα υποδεικνύει στο open πώς να χρησιμοποιήσετε το αρχείο. Μπορείτε να χρησιμοποιήσετε οποιονδήποτε έγκυρο συνδυασμό αυτών των χαρακτήρων:

Χαρακτήρας Νόημα
r Διάβασε
w Γράφω
x Δημιουργήστε & γράψτε
a Προσαρτώ
b Binary
t Κείμενο
+ Ενημέρωση

Η προεπιλεγμένη λειτουργία είναι rt (ανάγνωση αρχείου κειμένου), επομένως το πρώτο παράδειγμα σε αυτό το άρθρο λειτούργησε όπως αναμενόταν. Για να αντιγράψετε το αρχείο από το οποίο διαβάζετε, θα χρειαστεί να ανοίξετε ένα δεύτερο αρχείο χρησιμοποιώντας τη λειτουργία w για εγγραφή. Θα χρειαστεί επίσης να χρησιμοποιήσετε τη λειτουργία b και για τις δύο, για να διασφαλίσετε ότι οι λειτουργίες ανάγνωσης και εγγραφής λαμβάνουν υπόψη τα δυαδικά δεδομένα.

source = "./image.jpg"
target = "./a-copy-of-image.jpg"

with open(source, "rb") as src, open(target, "wb") as tgt:
    buffer = src.read()
    tgt.write(buffer)

Το μπλοκ with λειτουργεί και στα δύο αρχεία, επομένως θα τα κλείσει αυτόματα μόλις ολοκληρωθεί.

Ειδοποίηση
Ενώ η συνάρτηση open της Python σας δίνει πρόσβαση χαμηλού επιπέδου στα περιεχόμενα ενός αρχείου, η ενότητα os παρέχει αρκετές συναρτήσεις υψηλού επιπέδου που λειτουργούν σε αρχεία και στο σύστημα αρχείων.

Δημιουργήστε ένα νέο αρχείο κειμένου

Μπορείτε επίσης να χρησιμοποιήσετε το όρισμα mode για να δημιουργήσετε ένα νέο αρχείο, αλλά να προστατεύσετε οποιοδήποτε αρχείο με το ίδιο όνομα που μπορεί να υπάρχει ήδη:

open(filename, "x")

Εάν υπάρχει ήδη ένα αρχείο με το ίδιο όνομα, αυτή η ανοιχτή κλήση θα ενεργοποιήσει μια εξαίρεση FileExistsError. Αυτή είναι μια καλή προφύλαξη που εξαλείφει την ανάγκη για ρητό έλεγχο της ύπαρξης του αρχείου:

# Warning: don't do this!

import os.path

filename = "example.txt"

if os.path.isfile(filename):
    print("Sorry, file already exists")
else:
    with open(filename, "w") as f:
        # ...

Εκτός από τη σύνταξη λιγότερου κώδικα, υπάρχει ένας ακόμη καλύτερος λόγος για να χρησιμοποιήσετε τη λειτουργία "x": αποφεύγει μια συνθήκη κούρσας. Σκεφτείτε το παραπάνω παράδειγμα, το οποίο περιλαμβάνει μία εντολή για να ελέγξετε αν το αρχείο υπάρχει (αν os.path.isfile(όνομα αρχείου)), ακολουθούμενη από μια άλλη εντολή για να το ανοίξετε για εγγραφή (χρησιμοποιώντας open(όνομα αρχείου, "w") ως f). Εάν μια άλλη διεργασία εκτελέσει μια ενέργεια σε αυτό το αρχείο μεταξύ αυτών των δύο εντολών, μπορεί να προκληθεί καταστροφή.

Διαβάστε επίσης:  Πώς να κάνετε σίγαση άγνωστων καλούντων στο WhatsApp

Το άνοιγμα ενός αρχείου σε λειτουργία δημιουργίας μπορεί να αποτρέψει την καταστροφή, επειδή μία μόνο εντολή είναι υπεύθυνη για την επαλήθευση και το άνοιγμα του αρχείου. Είτε η λειτουργία αποτυγχάνει και το υπάρχον αρχείο προστατεύεται, είτε είναι επιτυχής και καμία άλλη διεργασία δεν μπορεί να δημιουργήσει άλλο αρχείο με το ίδιο όνομα εν τω μεταξύ.

Εγγραφή σε αρχείο καταγραφής μέσω πρόσθετου

Από προεπιλογή, ένα αρχείο που ανοίγετε σε λειτουργία εγγραφής θα περικοπεί πρώτο, επομένως τα περιεχόμενά του θα αντικατασταθούν. Για να προσθέσετε ένα αρχείο, μπορείτε να χρησιμοποιήσετε τη λειτουργία προσθήκης:

log = open("file.log", "a")

Και πάλι, η σύνδεση σε Python διευκολύνει τη χρήση της ενότητας καταγραφής, η οποία χειρίζεται πολλά από τα Μπερδεμένες λεπτομέρειες. Για παράδειγμα, μπορείτε να συνδεθείτε σε ένα αρχείο χρησιμοποιώντας έναν κώδικα παρόμοιο με τον ακόλουθο:

def startup():
    print("Just a dummy")

def main():
    print("Doing the main thing")
    return 42

def log(msg):
    logfile.write(msg + "\n")

logfile = open("file.log", "w")

log("starting startup")
startup()
log("startup finished")

log("starting main")
ret = main()
log("main finished: " + str(ret))

logfile.close()

Χρησιμοποιήστε την προσωρινή αποθήκευση για να ελέγξετε την αποθήκευση αρχείων.

Για να αποφευχθεί η συνεχής επανεκκίνηση και αποθήκευση του ίδιου αρχείου, το παράδειγμα καταγραφής χρησιμοποιεί μια καθολική μεταβλητή και ένα αναγνωριστικό αρχείου μακράς διαρκείας. Αυτό φαίνεται αποδεκτό σε ένα απλό παράδειγμα, αλλά στην πραγματικότητα, το πρόγραμμά σας μπορεί να εκτελείται επ' αόριστον και ίσως θελήσετε να ελέγξετε αυτό το αρχείο καταγραφής ανά πάσα στιγμή. Αν το κάνετε, μπορεί να εκπλαγείτε:

while True:
    log(random.random())
    input("Press Enter to continue")

Αυτός ο κώδικας προσομοιώνει την επαναλαμβανόμενη καταγραφή μιας διεργασίας που εκτελείται πολύ καιρό. Μπορείτε να ελέγξετε την καταγραφή πατώντας Enter όταν θέλετε να καταγράψετε μια άλλη γραμμή. Ωστόσο, όταν τον εκτελέσετε, θα παρατηρήσετε ένα σημαντικό ελάττωμα: αν πατήσετε Enter πολλές φορές και ελέγξετε το αρχείο καταγραφής, θα διαπιστώσετε ότι δεν γράφεται τίποτα σε αυτό!

Συμβουλή
Η εντολή tail—συγκεκριμένα tail -f—μπορεί να σας βοηθήσει να παρακολουθείτε αμέσως τις αλλαγές σε ένα αρχείο καταγραφής.

Αν πατήσετε Enter αρκετές φορές, θα δείτε κάποια αποτελέσματα επειδή η έξοδος θα έχει υπερβεί το προεπιλεγμένο μέγεθος buffer της Python. Στο σύστημά μου, αυτό το μέγεθος είναι 8192 byte και θα χρειαστεί πολύς χρόνος για να συσσωρευτεί.

Ευτυχώς, σε τέτοιες περιπτώσεις, υπάρχει ένα όρισμα buffering, το οποίο σας επιτρέπει να καθορίσετε μια πολιτική προσωρινής αποθήκευσης. Στην περίπτωση ενός αρχείου καταγραφής, η buffering γραμμής είναι ένας πολύ καλός τρόπος για να το κάνετε αυτό.

Δοκιμάστε να εκτελέσετε το προηγούμενο παράδειγμα με μια μικρή τροποποίηση:

logfile = open("file.log", "w", 1)

Το τρίτο όρισμα, 1, καθορίζει την προσωρινή αποθήκευση γραμμών. Όταν είναι ενεργοποιημένο, θα παρατηρήσετε ότι το αρχείο καταγραφής ενημερώνεται κάθε φορά που εκτελείτε τη συνάρτηση log(), επειδή περιλαμβάνει έναν χαρακτήρα νέας γραμμής κατά την εγγραφή στο αρχείο.

Διαβάστε επίσης:  Κορυφαίοι 9 τρόποι για να διορθώσετε τα καρούλια του Facebook που δεν εμφανίζονται στο κινητό

Καθορίστε μια κωδικοποίηση που να υποστηρίζει σωστά το UTF-8.

Η κωδικοποίηση χαρακτήρων είναι ένα πολύπλοκο θέμα, αλλά η ευρεία υιοθέτηση του UTF-8 σήμερα σημαίνει ότι σπάνια χρειάζεται να ανησυχείτε για αυτό. Ωστόσο, ορισμένα παλαιότερα συστήματα ενδέχεται να χρησιμοποιούν άλλες κωδικοποιήσεις και ποιος ξέρει τι μπορεί να συμβεί στο μέλλον; Τα σφάλματα κωδικοποίησης μπορούν να προκαλέσουν σημαντικά προβλήματα.

Το UTF-16 είναι μια εναλλακτική λύση στο UTF-8 και είναι πιο αποτελεσματικό για ορισμένους τύπους κειμένου. Τα περισσότερα κείμενα στην αγγλική γλώσσα είναι πιο κατάλληλα για το UTF-8, αλλά το κείμενο σε άλλες γλώσσες ή σύνολα χαρακτήρων — όπως ένα αρχείο γεμάτο με emoji — θα είναι μικρότερο εάν αποθηκευτεί σε UTF-16.

Εάν προσπαθήσετε να ανοίξετε ένα αρχείο UTF-16 χρησιμοποιώντας την τυπική μέθοδο ανοίγματος, θα δείτε το ακόλουθο σφάλμα:

Η συνάρτηση open αναμένει κωδικοποίηση UTF-8 από προεπιλογή, με ορισμένες προειδοποιήσεις, επομένως θα πρέπει να καθορίσετε την κωδικοποίηση για να ανοίξετε ένα αρχείο UTF-16:

f = open("../utf16-file.txt", encoding="utf-16")

Χρησιμοποιώντας ένα ονομασμένο όρισμα, μπορείτε να αφήσετε τα ορίσματα λειτουργίας και προσωρινής μνήμης ως προεπιλογή. Ή μπορείτε να καθορίσετε προεπιλεγμένες (ή προσαρμοσμένες) τιμές για αυτά:

f = open("../utf16-file.txt", "r", -1, "utf-16")

Ακόμα κι αν ανοίγετε ένα αρχείο με κωδικοποίηση UTF-8, συνιστάται να δηλώσετε ρητά την κωδικοποίηση χρησιμοποιώντας αυτό το όρισμα. Ορισμένα λειτουργικά συστήματα (όπως τα Windows) ενδέχεται να χρησιμοποιούν κωδικοποιήσεις διαφορετικές από την UTF-8, επομένως συνιστάται να μην βασίζεστε στην προεπιλογή.

utf16-bad Πώς να χρησιμοποιήσετε τη συνάρτηση open στην Python για ανάγνωση και εγγραφή αρχείων

Χειρισμός αρχείων με λανθασμένη μορφοποίηση χρησιμοποιώντας τον τελεστή σφάλματος

Παρόλο που πρέπει να είστε προσεκτικοί ώστε να καθορίσετε μια συγκεκριμένη κωδικοποίηση, αυτό μπορεί να μην είναι πάντα εφικτό. Ωστόσο, η συνάρτηση open δεν αποτυγχάνει απαραίτητα εάν υπάρχουν σφάλματα κωδικοποίησης. Μπορείτε να χρησιμοποιήσετε την παράμετρο σφάλματος για να επιλέξετε τη συμπεριφορά της από διάφορες επιλογές.

Η προεπιλεγμένη τιμή είναι "strict", η οποία δημιουργεί μια εξαίρεση, αλλά μπορείτε να αγνοήσετε εντελώς αυτά τα σφάλματα χρησιμοποιώντας την εντολή "ignore":

f = open("../utf16-file.txt", errors='ignore')

Το μειονέκτημα είναι ότι ενδέχεται πλέον να έχετε να κάνετε με κατεστραμμένα δεδομένα χωρίς να το γνωρίζετε. Το πόσο καλά μπορείτε να το χειριστείτε αυτό εξαρτάται από τη φύση των δεδομένων σας.

Μια συνηθισμένη εναλλακτική λύση είναι η αντικατάσταση των χαρακτήρων που λείπουν με έναν χαρακτήρα που υποδεικνύει ότι λείπουν, συνήθως ένα ερωτηματικό. Μπορεί να έχετε παρατηρήσει περιστασιακά αυτή τη συμπεριφορά σε ιστοσελίδες που δεν είχαν κωδικοποιηθεί σωστά. Μια τιμή "αντικατάστασης" για την παράμετρο σφάλματος θα κάνει ακριβώς αυτό.

Τέλος, η τιμή "ανάστροφη κάθετος" θα αντικαταστήσει κάθε λανθασμένο χαρακτήρα με το αντίστοιχο ως ακολουθία διαφυγής ανάστροφης κάθετου Python. Αυτό μπορεί να σας βοηθήσει να διορθώσετε την αιτία του προβλήματος, επομένως μπορεί να είναι χρήσιμο για δοκιμές ή ως μέρος ενός κιτ εργαλείων ανάπτυξης.

Κυριαρχία συνάρτησης open() Είναι ένα απαραίτητο βήμα για κάθε προγραμματιστή Python που εργάζεται με δεδομένα που είναι αποθηκευμένα σε αρχεία. Είτε θέλετε να διαβάσετε ρυθμίσεις από ένα αρχείο κειμένου είτε να δημιουργήσετε ένα νέο αρχείο για να αποθηκεύσετε τα αποτελέσματα του προγράμματός σας, η κατανόηση των διαφόρων επιλογών ανοίγματος, κλεισίματος και λειτουργίας κάνει την εργασία σας πιο επαγγελματική. Δοκιμάστε τα παραδείγματα μόνοι σας για να δείτε πώς αυτή η συνάρτηση κάνει τον καθημερινό σας προγραμματισμό ευκολότερο.

Κουμπί μετάβασης στην κορυφή