Python'da Listeleri Bir Dosyaya Okuma ve Yazma

Giriş

Python programcıları dizileri, listeleri ve sözlükleri serileştirilmiş veri yapıları olarak yoğun bir şekilde kullanır. Bu veri yapılarının kalıcı olarak saklanması, düzgün çalışması için bir dosya veya veritabanı gerektirir.

Bu yazıda, bir listenin dosyaya nasıl yazılacağına ve bu listenin tekrar belleğe nasıl okunacağına bir göz atacağız.

için bir dosyaya veri yazmak, Ve bir dosyadan veri oku, Python programlama dili standart yöntemler sunar write() ve read() tek bir satırla başa çıkmak için olduğu kadar writelines() ve readlines() birden fazla satırla uğraşmak için. Ayrıca, hem pickle ve json modüller, serileştirilmiş veri kümeleriyle de akıllıca başa çıkma yöntemlerine izin verir.

Kullanma oku () ve yazmak() Yöntemler

Karakterler (dizeler) ile başa çıkmak için temel read() ve write() yöntemler mükemmel çalışıyor. Böyle bir listeyi satır satır dosyaya kaydetme listfile.txt aşağıdaki gibi yapılabilir:


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

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

The listitem satır sonu ile uzatılır "n", önce ve sonra çıktı dosyasında saklanır. Şimdi tüm listeyi dosyadan nasıl okuyacağımıza bir göz atabiliriz. listfile.txt hafızaya geri dön:


places = []


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

Dizenin sonundaki satır sonunu kaldırmanız gerekeceğini unutmayın. Bu durumda, Python'un dizelerde liste işlemlerine de izin vermesi bize yardımcı olur. Bu kaldırma işlemi, dizenin kendisinde, son öğe dışında her şeyi tutan bir liste işlemi olarak yapılır. Bu öğe karakteri içerir "n" UNIX/Linux sistemlerinde satır sonunu temsil eder.

Kullanma yazma satırları() ve okuma satırları() Yöntemler

Bu makalenin başında belirtildiği gibi Python ayrıca iki yöntemi de içerir: writelines() ve readlines() – sırasıyla tek adımda birden çok satır yazmak ve okumak için. Listenin tamamını diskteki bir dosyaya yazalım:


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

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

Tüm listeyi diskteki bir dosyadan okumak için yapmamız gerekenler:


places = []


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

Yukarıdaki kod, diğer programlama dillerinden ödünç alınan daha geleneksel bir yaklaşımı izler. hadi bir daha yazalım pythonic yol:


places = []


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

İlk olarak, dosya içeriği aracılığıyla okunur readlines(). İkincisi, bir for her satırdan döngü, satır sonu karakteri kullanılarak kaldırılır. rstrip() yöntem. Üçüncüsü, dize, yerler listesine yeni bir liste öğesi olarak eklenir.

Koddan önceki listeye kıyasla çok daha kompakttır, ancak yeni başlayan Python programcıları için okunması daha zor olabilir.

Joblib Modülünü Kullanma

Şimdiye kadar açıklanan ilk yöntemler, listeyi insanların hala okuyabileceği şekilde, kelimenin tam anlamıyla bir dosyada sıralı bir liste olarak saklar. Bu, basit raporlar oluşturmak veya CSV dosyaları gibi kullanıcıların daha fazla kullanması için dışa aktarma dosyalarının çıktısını almak için harikadır. Ancak – amacınız bir listeyi daha sonra yüklenebilecek bir dosyaya seri hale getirmekse, onu insan tarafından okunabilir bir biçimde saklamaya gerek yoktur.

The joblib modül, bir Python nesnesini boşaltmanın en kolay yolunu sağlar (gerçekten herhangi bir nesne olabilir):

import joblib

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

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

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

joblib nesneleri verimli bir biçimde serileştirmenin ve daha sonra yüklemenin en basit ve en temiz yolu olmaya devam ediyor. gibi herhangi bir keyfi biçimi kullanabilirsiniz. .sav, .data, vb. Gerçekten önemli değil – ikisi de joblib ve bunun gibi alternatifler pickle dosyaları gayet iyi okuyacak.

Kullanma turşu modül

Alternatif olarak joblib, kullanabiliriz pickle! Onun dump() yöntem, listeyi ikili veri akışı olarak verimli bir şekilde depolar. Öncelikle çıktı dosyası listfile.data ikili yazma için açılır ("wb"). İkinci olarak, liste, açılan dosyada dump() yöntem:

import pickle

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

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

Bir sonraki adım olarak dosyadan listeyi aşağıdaki gibi okuyoruz. Öncelikle çıktı dosyası listfile.data okumak için ikili açılır ("rb"). İkinci olarak, yerlerin listesi dosyadan yüklenir. load() yöntem:

import pickle

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

Buradaki iki örnek, dizelerin kullanımını göstermektedir. Rağmen, pickle dizeler, sayılar, kendinden tanımlı yapılar ve Python'un sağladığı diğer tüm yerleşik veri yapıları gibi her tür Python nesnesiyle çalışır.

JSON Formatını Kullanma

İkili veri formatı pickle kullanımları Python'a özgüdür. Farklı programlar arasındaki birlikte çalışabilirliği geliştirmek için JavaScript Nesne Gösterimi (JSON) kullanımı kolay ve insan tarafından okunabilir bir şema sağlar ve bu nedenle dosyaları seri hale getirmek ve API'ler üzerinden paylaşmak için çok popüler hale geldi.

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

Aşağıdaki örnek, karışık değişken türlerinin bir listesinin çıktı dosyasına nasıl yazılacağını gösterir. json modül. Çıktı dosyasını yazmak için açtıktan sonra, dump() yöntem, temel listeyi JSON gösterimini kullanarak dosyada saklar:

import json


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


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

Çıktı dosyasının içeriğini tekrar belleğe okumak, verileri yazmak kadar basittir. karşılık gelen yöntem dump() adlandırıldı load():

import json


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

Sonuç

Yukarıda gösterdiğimiz farklı yöntemler, basit yazma/okuma verilerinden, pickle ve JSON kullanarak ikili akışlar aracılığıyla veri boşaltmaya/yüklemeye kadar uzanır. Bu, bir listeyi kalıcı olarak saklamayı ve tekrar belleğe okumayı kolaylaştırır.

Zaman Damgası:

Den fazla Yığın kötüye kullanımı