Saya terbiasa membawa data masuk dan keluar dari Python menggunakan file .csv, tetapi ada tantangan yang jelas untuk ini. Adakah saran tentang cara-cara sederhana untuk menyimpan kamus (atau kumpulan kamus) dalam file json atau pck? Sebagai contoh:
data = {}
data ['key1'] = "keyinfo"
data ['key2'] = "keyinfo2"
Saya ingin tahu keduanya cara menyimpan ini, dan kemudian cara memuatnya kembali.
Jawaban:
Acar simpan:
Lihat dokumentasi modul acar untuk informasi tambahan mengenai
protocol
argumen tersebut.Beban acar :
JSON simpan:
Berikan argumen tambahan seperti
sort_keys
atauindent
untuk mendapatkan hasil yang cantik. Argumen sort_keys akan mengurutkan kunci secara abjad dan indentasi akan membuat indentasi struktur data Anda denganindent=N
spasi.Beban JSON :
sumber
pickle.dump
juga. Jika file tidak harus dapat dibaca oleh manusia maka itu dapat mempercepat banyak hal.json.dump(data, fp, sort_keys=True, indent=4)
. Info lebih lanjut dapat ditemukan di sinipickle.dump(data, fp, protocol=pickle.HIGHEST_PROTOCOL)
import pickle
Contoh minimal, menulis langsung ke file:
atau membuka / menutup dengan aman:
Jika Anda ingin menyimpannya dalam string, bukan file:
sumber
Lihat juga paket percson ujson. https://pypi.python.org/pypi/ujson
sumber
Untuk menulis ke file:
Untuk membaca dari file:
myfile
adalah objek file untuk file tempat Anda menyimpan dict.sumber
json.dump(myfile)
danjson.load(myfile)
Jika Anda menginginkan serialisasi tetapi tidak membutuhkan data di program lain, saya sangat merekomendasikan
shelve
modul ini. Anggap saja sebagai kamus persisten.sumber
json
lebih mudah.shelve
hanya lebih baik untuk mengakses satu kunci sekaligus.Jika Anda ingin alternatif
pickle
ataujson
, Anda dapat menggunakanklepto
.Dengan
klepto
, jika Anda pernah menggunakannyaserialized=True
, kamus akan ditulismemo.pkl
sebagai kamus acar dan bukan dengan teks yang jelas.Anda bisa sampai di
klepto
sini: https://github.com/uqfoundation/kleptodill
mungkin merupakan pilihan yang lebih baik untuk pengawetan denganpickle
sendirinya, karenadill
dapat membuat serialisasi hampir semua hal dengan python.klepto
juga bisa digunakandill
.Anda bisa sampai di
dill
sini: https://github.com/uqfoundation/dillMumbo-jumbo tambahan pada beberapa baris pertama adalah karena
klepto
dapat dikonfigurasi untuk menyimpan kamus ke file, ke konteks direktori, atau ke database SQL. API adalah sama untuk apa pun yang Anda pilih sebagai arsip backend. Ini memberi Anda kamus "dapat diarsipkan" dengan mana Anda dapat menggunakanload
dandump
untuk berinteraksi dengan arsip.sumber
Ini adalah topik lama, tetapi untuk kelengkapan, kita harus menyertakan ConfigParser dan configparser yang masing-masing merupakan bagian dari pustaka standar di Python 2 dan 3. Modul ini membaca dan menulis ke file config / ini dan (setidaknya dalam Python 3) berperilaku seperti kamus. Ini memiliki manfaat tambahan bahwa Anda dapat menyimpan beberapa kamus ke dalam bagian terpisah dari file konfigurasi Anda dan mengingatnya. Manis!
Contoh Python 2.7.x.
Contoh Python 3.X.
output konsol
isi dari config.ini
sumber
Jika menyimpan ke file json, cara terbaik dan termudah untuk melakukan ini adalah:
sumber
json.dump( )
diuraikan dalam jawaban lain?kasus penggunaan saya adalah untuk menyimpan beberapa objek json ke file dan jawaban marty agak membantu saya. Tetapi untuk melayani kasus penggunaan saya, jawabannya tidak lengkap karena akan menimpa data lama setiap kali entri baru disimpan.
Untuk menyimpan banyak entri dalam file, seseorang harus memeriksa konten lama (yaitu, baca sebelum menulis). File tipikal yang menyimpan data json akan memiliki root
list
atauobject
sebagai. Jadi saya menganggap bahwa file json saya selalu memilikilist of objects
dan setiap kali saya menambahkan data ke dalamnya, saya cukup memuat daftar terlebih dahulu, menambahkan data baru saya di dalamnya dan membuangnya kembali ke contoh file yang hanya dapat ditulisi (w
):file json baru akan terlihat seperti ini:
CATATAN: Sangat penting untuk memiliki file bernama
file.json
dengan[]
sebagai data awal untuk pendekatan ini untuk bekerjaPS: tidak terkait dengan pertanyaan awal, tetapi pendekatan ini juga dapat lebih ditingkatkan dengan terlebih dahulu memeriksa apakah entri kita sudah ada (berdasarkan 1 / beberapa kunci) dan baru kemudian menambahkan dan menyimpan data. Beri tahu saya jika seseorang membutuhkan pemeriksaan itu, saya akan menambahkan jawabannya
sumber