Saya perlu menyimpan sekitar selusin objek ke sebuah file dan kemudian memulihkannya nanti. Saya sudah mencoba menggunakan for loop dengan acar dan rak tetapi tidak berhasil.
Edit.
Semua objek yang saya coba simpan berada di kelas yang sama (saya seharusnya menyebutkan ini sebelumnya), dan saya tidak menyadari bahwa saya bisa menyelamatkan seluruh kelas seperti ini:
import pickle
def saveLoad(opt):
global calc
if opt == "save":
f = file(filename, 'wb')
pickle.dump(calc, f, 2)
f.close
print 'data saved'
elif opt == "load":
f = file(filename, 'rb')
calc = pickle.load(f)
else:
print 'Invalid saveLoad option'
Jawaban:
Jika Anda perlu menyimpan banyak objek, Anda cukup memasukkannya ke dalam satu daftar, atau tuple, misalnya:
Jika Anda memiliki banyak data, Anda dapat mengurangi ukuran file dengan meneruskan
protocol=-1
kedump()
;pickle
kemudian akan menggunakan protokol terbaik yang tersedia alih-alih protokol historis default (dan lebih kompatibel ke belakang). Dalam hal ini, file harus dibuka dalam mode biner (wb
danrb
, masing-masing).Mode biner juga harus digunakan dengan Python 3, karena protokol defaultnya menghasilkan data biner (yaitu non-teks) (mode penulisan
'wb'
dan mode membaca'rb'
).sumber
with open('objs.pickle', 'wb') as f:
(perhatikanwb
).with open('objs.pkl') as f:
membandingkan dengan sederhanaobj1, obj2 = pickle.load(open("objs.pkl","rb"))
? Apakah ada perbedaan antara keduanya?Ada pustaka bawaan yang disebut
pickle
. Menggunakanpickle
Anda dapat membuang objek ke file dan memuatnya nanti.sumber
f = open('store.pckl', 'wb')
untuk membuka file yang akan ditulisi. Lihat stackoverflow.com/questions/13906623/… Dan gunakan `f = open ('store.pckl', 'rb') untuk membuka file untuk dibaca. Lihat stackoverflow.com/questions/7031699/… .Anda harus melihat modul rak dan acar . Jika Anda perlu menyimpan banyak data, mungkin lebih baik menggunakan database
sumber
Pendekatan lain untuk menyimpan banyak variabel ke file acar adalah:
sumber
Anda bisa menggunakan
klepto
, yang menyediakan cache persisten ke memori, disk, atau database.Kemudian, setelah juru bahasa restart ...
Dapatkan kodenya di sini: https://github.com/uqfoundation
sumber
Pendekatan berikut tampaknya sederhana dan dapat digunakan dengan variabel dengan ukuran berbeda:
sumber
hickle
paket lebih kuat (lebih sedikit rawan kesalahan) dan bahkan lebih sederhana (lebih sedikit kode) daripadapickle
.