Ανάγνωση και εγγραφή λιστών σε ένα αρχείο στην Python

Εισαγωγή

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

Σε αυτό το άρθρο, θα ρίξουμε μια ματιά στο πώς να γράψετε μια λίστα σε αρχείο και πώς να διαβάσετε αυτήν τη λίστα ξανά στη μνήμη.

Προς την εγγραφή δεδομένων σε ένα αρχείο, Και ανάγνωση δεδομένων από ένα αρχείο, η γλώσσα προγραμματισμού Python προσφέρει τις τυπικές μεθόδους write() και read() για την αντιμετώπιση μιας μόνο γραμμής, καθώς και writelines() και readlines() για την αντιμετώπιση πολλαπλών γραμμών. Επιπλέον, τόσο οι pickle και την json Οι μονάδες επιτρέπουν επίσης έξυπνους τρόπους αντιμετώπισης σειριακών συνόλων δεδομένων.

Χρήση του ανάγνωση() και γράφω() Μέθοδοι

Για να ασχοληθείτε με χαρακτήρες (χορδές) το βασικό read() και write() οι μέθοδοι λειτουργούν άριστα. Αποθήκευση μιας τέτοιας λίστας γραμμή προς γραμμή στο αρχείο listfile.txt μπορεί να γίνει ως εξής:


places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    for listitem in places:
        filehandle.write(f'{listitem}n')

Η listitem επεκτείνεται με μια διακοπή γραμμής "n", πρώτα, και στη συνέχεια αποθηκεύεται στο αρχείο εξόδου. Τώρα μπορούμε να ρίξουμε μια ματιά στον τρόπο ανάγνωσης ολόκληρης της λίστας από το αρχείο listfile.txt πίσω στη μνήμη:


places = []


with open('listfile.txt', 'r') as filehandle:
    for line in filehandle:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

Λάβετε υπόψη ότι θα πρέπει να αφαιρέσετε τη διακοπή γραμμής από το τέλος της συμβολοσειράς. Σε αυτήν την περίπτωση, μας βοηθά το γεγονός ότι η Python επιτρέπει λειτουργίες λίστας και σε συμβολοσειρές. Αυτή η αφαίρεση γίνεται απλώς ως λειτουργία λίστας στην ίδια τη συμβολοσειρά, η οποία διατηρεί τα πάντα εκτός από το τελευταίο στοιχείο. Αυτό το στοιχείο περιέχει τον χαρακτήρα "n" που αντιπροσωπεύει την αλλαγή γραμμής στα συστήματα UNIX/Linux.

Χρήση του writelines () και Readlines () Μέθοδοι

Όπως αναφέρθηκε στην αρχή αυτού του άρθρου, η Python περιέχει επίσης τις δύο μεθόδους - writelines() και readlines() – να γράψετε και να διαβάσετε πολλές γραμμές σε ένα βήμα, αντίστοιχα. Ας γράψουμε ολόκληρη τη λίστα σε ένα αρχείο στο δίσκο:


places_list = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    filehandle.writelines(f"{place for place in places_list}n")

Για να διαβάσουμε ολόκληρη τη λίστα από ένα αρχείο στο δίσκο πρέπει:


places = []


with open('listfile.txt', 'r') as filehandle:
    filecontents = filehandle.readlines()
    for line in filecontents:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

Ο παραπάνω κώδικας ακολουθεί μια πιο παραδοσιακή προσέγγιση δανεισμένη από άλλες γλώσσες προγραμματισμού. Ας το γράψουμε περισσότερα Pythonic τρόπος:


places = []


with open('listfile.txt', 'r') as filehandle:
    places = [current_place.rstrip() for current_place in filehandle.readlines()]

Αρχικά, το περιεχόμενο του αρχείου διαβάζεται μέσω readlines(). Δεύτερον, σε α for βρόχος από κάθε γραμμή ο χαρακτήρας αλλαγής γραμμής αφαιρείται χρησιμοποιώντας το rstrip() μέθοδος. Τρίτον, η συμβολοσειρά προστίθεται στη λίστα θέσεων ως νέο στοιχείο λίστας.

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

Χρήση της ενότητας Joblib

Οι αρχικές μέθοδοι που εξηγήθηκαν μέχρι τώρα αποθηκεύουν τη λίστα με τρόπο που οι άνθρωποι μπορούν ακόμα να τη διαβάσουν – κυριολεκτικά μια διαδοχική λίστα σε ένα αρχείο. Αυτό είναι εξαιρετικό για τη δημιουργία απλών αναφορών ή την παραγωγή αρχείων εξαγωγής για περαιτέρω χρήση από τους χρήστες, όπως αρχεία CSV. Ωστόσο – εάν ο στόχος σας είναι απλώς να σειριοποιήσετε μια λίστα σε ένα αρχείο, το οποίο μπορεί να φορτωθεί αργότερα, δεν χρειάζεται να την αποθηκεύσετε σε μορφή αναγνώσιμη από τον άνθρωπο.

Η joblib Η ενότητα παρέχει τον ευκολότερο τρόπο για να απορρίψετε ένα αντικείμενο Python (μπορεί να είναι πραγματικά οποιοδήποτε αντικείμενο):

import joblib

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

joblib.dump(places, 'places.sav')

places = joblib.load('places.sav')
print(places) 

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

Χρήση του pickle Μονάδα μέτρησης

Ως εναλλακτική λύση joblib, μπορούμε να χρησιμοποιήσουμε pickle! Του dump() Η μέθοδος αποθηκεύει τη λίστα αποτελεσματικά ως δυαδική ροή δεδομένων. Πρώτον, το αρχείο εξόδου listfile.data ανοίγει για δυαδική γραφή ("wb"). Δεύτερον, η λίστα αποθηκεύεται στο ανοιχτό αρχείο χρησιμοποιώντας το dump() μέθοδος:

import pickle

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.data', 'wb') as filehandle:
    
    pickle.dump(places, filehandle)

Ως επόμενο βήμα, διαβάζουμε τη λίστα από το αρχείο ως εξής. Πρώτον, το αρχείο εξόδου listfile.data ανοίγει δυαδικό για ανάγνωση ("rb"). Δεύτερον, η λίστα με τα μέρη φορτώνεται από το αρχείο χρησιμοποιώντας το load() μέθοδος:

import pickle

with open('listfile.data', 'rb') as filehandle:
    
    placesList = pickle.load(filehandle)

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

Χρησιμοποιώντας τη μορφή JSON

Η μορφή δυαδικών δεδομένων pickle Οι χρήσεις είναι συγκεκριμένες για την Python. Για να βελτιώσετε τη διαλειτουργικότητα μεταξύ διαφορετικών προγραμμάτων, το JavaScript Object Notation (JSON) παρέχει ένα εύχρηστο και αναγνώσιμο από τον άνθρωπο σχήμα, και έτσι έγινε πολύ δημοφιλές για τη σειριοποίηση αρχείων και την κοινή χρήση τους μέσω API.

Ρίξτε μια ματιά στον πρακτικό μας οδηγό για την εκμάθηση του Git, με βέλτιστες πρακτικές, πρότυπα αποδεκτά από τον κλάδο και συμπεριλαμβανόμενο φύλλο εξαπάτησης. Σταματήστε τις εντολές του Git στο Google και πραγματικά μαθαίνουν το!

Το ακόλουθο παράδειγμα δείχνει πώς να γράψετε μια λίστα τύπων μικτών μεταβλητών σε ένα αρχείο εξόδου χρησιμοποιώντας το json μονάδα μέτρησης. Αφού ανοίξει το αρχείο εξόδου για εγγραφή, το dump() Η μέθοδος αποθηκεύει τη βασική λίστα στο αρχείο χρησιμοποιώντας τη σημείωση JSON:

import json


basic_list = [1, "Cape Town", 4.6]


with open('listfile.txt', 'w') as filehandle:
    json.dump(basic_list, filehandle)

Η ανάγνωση των περιεχομένων του αρχείου εξόδου πίσω στη μνήμη είναι τόσο απλή όσο η εγγραφή των δεδομένων. Η αντίστοιχη μέθοδος για dump() ονομάζεται load():

import json


with open('listfile.txt', 'r') as filehandle:
    basic_list = json.load(filehandle)

Συμπέρασμα

Οι διαφορετικές μέθοδοι που δείξαμε παραπάνω κυμαίνονται από απλή εγγραφή/ανάγνωση δεδομένων έως απόρριψη/φόρτωση δεδομένων μέσω δυαδικών ροών χρησιμοποιώντας pickle και JSON. Αυτό απλοποιεί τη μόνιμη αποθήκευση μιας λίστας και την ανάγνωσή της στη μνήμη.

Σφραγίδα ώρας:

Περισσότερα από Stackabuse