Membaca dan Menulis Daftar ke File dengan Python

Pengantar

Pemrogram Python secara intensif menggunakan array, daftar, dan kamus sebagai struktur data serial. Menyimpan struktur data ini secara terus-menerus membutuhkan file atau database agar berfungsi dengan baik.

Dalam artikel ini, kita akan melihat cara menulis daftar ke file, dan cara membaca daftar itu kembali ke memori.

Untuk menulis data dalam file, Dan membaca data dari file, bahasa pemrograman Python menawarkan metode standar write() dan read() untuk berurusan dengan satu baris, serta writelines() dan readlines() untuk menangani banyak baris. Selanjutnya, keduanya pickle dan json modul memungkinkan cara cerdas untuk menangani set data serial juga.

Menggunakan Baca() dan menulis() metode

Untuk menangani karakter (string) dasar read() dan write() metode bekerja dengan sangat baik. Menyimpan daftar seperti itu baris demi baris ke dalam file listfile.txt dapat dilakukan sebagai berikut:


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

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

Grafik listitem diperpanjang dengan jeda baris "n", pertama, dan kemudian disimpan ke dalam file output. Sekarang kita dapat melihat cara membaca seluruh daftar dari file listfile.txt kembali ke memori:


places = []


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

Ingatlah bahwa Anda harus menghapus jeda baris dari ujung string. Dalam hal ini, ini membantu kami bahwa Python juga mengizinkan operasi daftar pada string. Penghapusan ini hanya dilakukan sebagai operasi daftar pada string itu sendiri, yang menyimpan semuanya kecuali elemen terakhir. Elemen ini mengandung karakter "n" yang mewakili jeda baris pada sistem UNIX/Linux.

Menggunakan garis tulis() dan garis baca() metode

Seperti yang disebutkan di awal artikel ini, Python juga berisi dua metode โ€“ writelines() dan readlines() โ€“ untuk menulis dan membaca beberapa baris dalam satu langkah, masing-masing. Mari kita menulis seluruh daftar ke file di disk:


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

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

Untuk membaca seluruh daftar dari file pada disk kita perlu:


places = []


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

Kode di atas mengikuti pendekatan yang lebih tradisional yang dipinjam dari bahasa pemrograman lain. Ayo tulis lebih banyak lagi Pythonik cara:


places = []


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

Pertama, konten file dibaca melalui readlines(). Kedua, dalam for loop dari setiap baris karakter jeda baris dihapus menggunakan rstrip() metode. Ketiga, string ditambahkan ke daftar tempat sebagai item daftar baru.

Dibandingkan dengan daftar sebelum kode jauh lebih kompak, tetapi mungkin lebih sulit dibaca untuk programmer Python pemula.

Menggunakan Modul Joblib

Metode awal yang dijelaskan hingga sekarang menyimpan daftar dengan cara yang masih dapat dibaca manusia โ€“ secara harfiah daftar berurutan dalam sebuah file. Ini bagus untuk membuat laporan sederhana atau mengeluarkan file ekspor untuk digunakan lebih lanjut oleh pengguna, seperti file CSV. Namun โ€“ jika tujuan Anda hanyalah membuat serial daftar menjadi file, yang dapat dimuat nanti, tidak perlu menyimpannya dalam format yang dapat dibaca manusia.

Grafik joblib module menyediakan cara termudah untuk membuang objek Python (bisa berupa objek apa saja):

import joblib

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

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

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

joblib tetap menjadi cara paling sederhana dan terbersih untuk membuat serial objek dalam format yang efisien, dan memuatnya nanti. Anda dapat menggunakan format sembarang, seperti .sav, .data, dll. Tidak masalah โ€“ keduanya joblib dan alternatif seperti pickle akan membaca file dengan baik.

Menggunakan acar Modul

Sebagai alternatif joblib, kita bisa gunakan pickle! Nya dump() metode menyimpan daftar secara efisien sebagai aliran data biner. Pertama, file keluaran listfile.data dibuka untuk penulisan biner ("wb"). Kedua, daftar disimpan dalam file yang dibuka menggunakan dump() Metode:

import pickle

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

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

Sebagai langkah selanjutnya, kita membaca daftar dari file sebagai berikut. Pertama, file keluaran listfile.data dibuka biner untuk membaca ("rb"). Kedua, daftar tempat dimuat dari file menggunakan load() Metode:

import pickle

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

Dua contoh di sini menunjukkan penggunaan string. Meskipun, pickle bekerja dengan semua jenis objek Python seperti string, angka, struktur yang ditentukan sendiri, dan setiap struktur data bawaan lainnya yang disediakan Python.

Menggunakan Format JSON

Format data biner pickle kegunaan khusus untuk Python. Untuk meningkatkan interoperabilitas antara program yang berbeda, JavaScript Object Notation (JSON) menyediakan skema yang mudah digunakan dan dapat dibaca manusia, dan dengan demikian menjadi sangat populer untuk membuat serial file dan membagikannya melalui API.

Lihat panduan praktis dan praktis kami untuk mempelajari Git, dengan praktik terbaik, standar yang diterima industri, dan termasuk lembar contekan. Hentikan perintah Googling Git dan sebenarnya belajar itu!

Contoh berikut menunjukkan cara menulis daftar tipe variabel campuran ke file output menggunakan: json modul. Setelah membuka file output untuk menulis, dump() metode menyimpan daftar dasar dalam file menggunakan notasi JSON:

import json


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


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

Membaca isi file output kembali ke memori semudah menulis data. Metode yang sesuai untuk dump() bernama load():

import json


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

Kesimpulan

Metode berbeda yang kami tunjukkan di atas berkisar dari penulisan/pembacaan data sederhana hingga dumping/pemuatan data melalui aliran biner menggunakan pickle dan JSON. Ini menyederhanakan penyimpanan daftar secara terus-menerus dan membacanya kembali ke dalam memori.

Stempel Waktu:

Lebih dari penyalahgunaan