Citirea și scrierea listelor într-un fișier în Python

Introducere

Programatorii Python folosesc intens matrice, liste și dicționare ca structuri de date serializate. Stocarea acestor structuri de date în mod persistent necesită fie un fișier, fie o bază de date pentru a funcționa corect.

În acest articol, vom arunca o privire la cum să scrieți o listă într-un fișier și cum să citim acea listă înapoi în memorie.

La scrie datele într-un fișier, Precum și pentru a citiți datele dintr-un fișier, limbajul de programare Python oferă metodele standard write() și read() pentru a trata o singură linie, precum și writelines() și readlines() pentru a trata mai multe linii. În plus, atât pickle si json modulele permit modalități inteligente de a trata și seturile de date serializate.

Utilizarea citit() și scrie() Metode

Pentru a trata caractere (șiruri) de bază read() și write() metodele funcționează excelent. Salvarea unei astfel de liste linie cu linie în fișier listfile.txt se poate face astfel:


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

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

listitem este prelungit printr-o întrerupere de linie "n", în primul rând și apoi stocat în fișierul de ieșire. Acum putem arunca o privire la cum să citim întreaga listă din fișier listfile.txt înapoi în memorie:


places = []


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

Rețineți că va trebui să eliminați întreruperea de linie de la capătul șirului. În acest caz, ne ajută faptul că Python permite operațiuni de listă și pe șiruri. Această eliminare se face pur și simplu ca o operație de listă pe șirul în sine, care păstrează totul, cu excepția ultimului element. Acest element conține caracterul "n" care reprezintă ruptura de linie pe sistemele UNIX/Linux.

Utilizarea scrie linii() și readlines() Metode

După cum sa menționat la începutul acestui articol, Python conține și cele două metode - writelines() și readlines() – pentru a scrie și, respectiv, a citi mai multe rânduri într-un singur pas. Să scriem întreaga listă pe un fișier de pe disc:


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

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

Pentru a citi întreaga listă de pe un fișier de pe disc, trebuie să:


places = []


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

Codul de mai sus urmează o abordare mai tradițională împrumutată din alte limbaje de programare. Să o scriem într-un mai mult Pitonic cale:


places = []


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

În primul rând, conținutul fișierului este citit prin intermediul readlines(). În al doilea rând, într-un for buclă de pe fiecare linie, caracterul de întrerupere de linie este eliminat folosind rstrip() metodă. În al treilea rând, șirul este adăugat la lista de locuri ca un nou element de listă.

În comparație cu lista de dinainte, codul este mult mai compact, dar poate fi mai dificil de citit pentru programatorii Python începători.

Folosind modulul Joblib

Metodele inițiale explicate până acum stochează lista într-un mod în care oamenii o pot citi în continuare - literalmente o listă secvențială într-un fișier. Acest lucru este excelent pentru a crea rapoarte simple sau a scoate fișiere de export pentru ca utilizatorii să le utilizeze în continuare, cum ar fi fișierele CSV. Cu toate acestea, dacă scopul dvs. este să serializați o listă într-un fișier, care poate fi încărcat ulterior, nu este nevoie să o stocați într-un format care poate fi citit de om.

joblib modulul oferă cel mai simplu mod de a descărca un obiect Python (poate fi orice obiect cu adevărat):

import joblib

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

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

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

joblib rămâne cel mai simplu și mai curat mod de a serializa obiecte într-un format eficient și de a le încărca mai târziu. Puteți utiliza orice format arbitrar, cum ar fi .sav, .data, etc. Nu prea contează – ambele joblib și alternative precum pickle va citi bine fișierele.

Utilizarea murătură Module

Ca alternativă la joblib, putem folosi pickle! Este dump() metoda stochează lista în mod eficient ca flux de date binar. În primul rând, fișierul de ieșire listfile.data este deschis pentru scriere binară ("wb"). În al doilea rând, lista este stocată în fișierul deschis folosind dump() metodă:

import pickle

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

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

Ca pas următor, citim lista din fișier după cum urmează. În primul rând, fișierul de ieșire listfile.data este deschis binar pentru citire ("rb"). În al doilea rând, lista de locuri este încărcată din fișier folosind load() metodă:

import pickle

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

Cele două exemple de aici demonstrează utilizarea șirurilor de caractere. Cu toate că, pickle funcționează cu tot felul de obiecte Python, cum ar fi șiruri de caractere, numere, structuri autodefinite și orice altă structură de date încorporată oferită de Python.

Folosind formatul JSON

Formatul datelor binare pickle utilizări este specific pentru Python. Pentru a îmbunătăți interoperabilitatea între diferite programe, JavaScript Object Notation (JSON) oferă o schemă ușor de utilizat și care poate fi citită de om și, astfel, a devenit foarte populară pentru serializarea fișierelor și partajarea lor prin API-uri.

Consultați ghidul nostru practic și practic pentru a învăța Git, cu cele mai bune practici, standarde acceptate de industrie și fisa de cheat incluse. Opriți căutarea pe Google a comenzilor Git și de fapt învăţa aceasta!

Următorul exemplu demonstrează cum să scrieți o listă de tipuri de variabile mixte într-un fișier de ieșire folosind JSON modul. După ce a deschis fișierul de ieșire pentru scriere, fișierul dump() metoda stochează lista de bază în fișier folosind notația JSON:

import json


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


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

Citirea conținutului fișierului de ieșire înapoi în memorie este la fel de simplă ca și scrierea datelor. Metoda corespunzătoare pentru dump() se numeste load():

import json


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

Concluzie

Diferite metode pe care le-am arătat mai sus variază de la simpla scriere/citire a datelor până la descărcarea/încărcarea datelor prin fluxuri binare folosind pickle și JSON. Acest lucru simplifică stocarea persistentă a unei liste și citirea acesteia înapoi în memorie.

Timestamp-ul:

Mai mult de la Stackabuse