Saya menulis sebuah program yang menyimpan data dalam objek kamus, tetapi data ini perlu disimpan di beberapa titik selama pelaksanaan program dan dimuat kembali ke objek kamus ketika program dijalankan kembali. Bagaimana saya mengubah objek kamus menjadi string yang dapat ditulis ke file dan dimuat kembali ke objek kamus? Mudah-mudahan ini akan mendukung kamus yang berisi kamus.
python
json
dictionary
serialization
AJ00200
sumber
sumber
import json
seperti yang saya lakukan!Jika kamus Anda tidak terlalu besar, mungkin str + eval dapat melakukan tugasnya:
Anda dapat menggunakan ast.literal_eval alih-alih eval untuk keamanan tambahan jika sumbernya tidak dipercaya.
sumber
Saya menggunakan
json
:sumber
Gunakan
pickle
modul untuk menyimpannya ke disk dan memuat nanti.sumber
Mengapa tidak menggunakan fungsi ast library inbuilt Python 3 literal_eval . Lebih baik menggunakan literal_eval daripada eval
akan memberikan output sebagai Kamus aktual
Dan Jika Anda meminta untuk mengonversi Kamus ke String , Bagaimana dengan menggunakan str () metode dari Python.
Misalkan kamus adalah:
Dan ini akan dilakukan seperti ini:
Akan Cetak:
Ini semudah yang kamu mau.
sumber
Jika di Chinses
sumber
Konversi kamus menjadi JSON (string)
akan membuat Anda:
Ubah string menjadi kamus
sumber
Saya pikir Anda harus mempertimbangkan untuk menggunakan
shelve
modul yang menyediakan objek seperti kamus yang didukung file yang persisten. Mudah digunakan sebagai pengganti kamus "nyata" karena hampir secara transparan menyediakan program Anda dengan sesuatu yang dapat digunakan seperti kamus, tanpa perlu secara eksplisit mengubahnya menjadi string dan kemudian menulis ke file (atau sebaliknya). sebaliknya).Perbedaan utama adalah perlu awalnya
open()
sebelum digunakan pertama dan kemudianclose()
ketika Anda selesai (dan mungkinsync()
itu, tergantung padawriteback
opsi yang digunakan). Setiap objek file "rak" yang dibuat dapat berisi kamus reguler sebagai nilai, yang memungkinkan mereka untuk secara logis bersarang.Berikut ini contoh sepele:
Keluaran:
sumber
Jika Anda peduli tentang kecepatan gunakan ujson (UltraJSON), yang memiliki API yang sama dengan json:
sumber
Saya menggunakan yaml untuk itu jika perlu dibaca (baik JSON atau XML adalah IMHO), atau jika membaca tidak perlu, saya menggunakan acar.
Menulis
Baca kembali
sumber
b
tanda saat membuka file di sini.dumps()
default ke protokol 0, yang merupakan protokol ascii. Itu sebabnya'rb'
tidak perlu IMHO.