Belajar dengan membaca secara berurutan

pickle dan base64 — Serialisasi Objek dan Konversi Binary-ke-Text

pickle.dumps / loads mengubah dict atau class sendiri jadi bytes dan memulihkan utuh, base64.b64encode / b64decode menumpangkan biner ke jalur teks sambil dicek tipe balik.

Kita akan membahas dua modul yang dipakai saat memindahkan data melalui file atau lewat jaringan. pickle menyimpan objek Python (dict, instance class, dll.) dalam bentuk yang dapat dipulihkan sepenuhnya nanti, sementara base64 mengkonversi data binary seperti gambar atau audio menjadi string "alfanumerik plus dua simbol" supaya kamu dapat menjatuhkannya langsung ke email, JSON, atau URL. Keduanya modul standard library untuk konversi data di batas internal atau transport eksternal.

Memilah untuk apa setiap modul

Kedua modul terbagi alami berdasarkan kombinasi input/output. Pakai diagram di bawah untuk menangkap gambaran besar, lalu kita akan menggali kegunaan tipikal dan API di setiap bagian.

Peran kedua modul
pickleobjek ↔ bytesinternal / antar prosesbase64binary ↔ ASCIItransport (JSON/mail)
pickle melakukan objek ↔ bytes (penyimpanan internal, antar proses); base64 melakukan binary ↔ teks ASCII (konversi transport: JSON / mail / URL). Use case-nya tidak tumpang tindih, jadi kamu kadang akan mengkombinasikannya.

pickle — Konversi Objek Python Langsung ke Bytes

pickle adalah modul standard library yang mengkonversi objek Python ke bentuk yang dapat dipulihkan sepenuhnya nanti. Hasilnya adalah nilai bytes (urutan integer kontigu dari 0 hingga 255 — tipe untuk menangani "urutan angka" alih-alih "urutan karakter" seperti string). Bytes adalah format dasar untuk situasi di mana mesin, bukan manusia, akan membaca data — menyimpan ke file, mengirim lewat jaringan, menyerahkan data ke proses lain.

Empat kegunaan tipikal pickle
simpan model MLfile model.pkltransfer antar prosesmultiprocessingcache komputasilewatkan kerja berattask queueCelery memindahkan args
Menyimpan model ML / mentransfer objek antar proses / caching komputasi yang mahal / task queue. Benang merahnya adalah semuanya tetap di dalam dunia Python — untuk berbicara dengan dunia luar, pakai json.

Tidak seperti json, kekuatan pickle adalah dapat menyimpan bukan hanya dict / list / string / angka tetapi juga instance class custom dan objek fungsi, yang membuatnya berguna untuk menyimpan model ML atau meneruskan objek antar proses Python.

Simetri pickle.dumps / loads
objek Python(dict / instance / dll.)pickle.dumpsbytes(bentuk binary)bytes(bentuk binary)pickle.loadsobjek Python(dict / instance / dll.)tulisbaca
Baris atas: dumps = arah objek Python → bytes. Baris bawah: loads = arah bytes → objek Python. Tidak seperti json, instance class custom dipertahankan apa adanya, tetapi nilai kembaliannya adalah bytes, bukan teks (jadi saat menulis ke file, buka dalam mode binary "wb" / "rb").

Jangan pernah loads data pickle dari orang lain

pickle.loads dapat mengeksekusi kode Python sembarang, jadi memberikan bytes dari sumber yang tidak terpercaya menjadi kerentanan eksekusi kode sembarang. Batasi diri untuk skenario "saya buat, saya baca kembali" dan jangan pernah memakainya pada data yang diterima lewat jaringan atau dari orang lain. Untuk komunikasi eksternal, pakai json saja.

FungsiPeranCatatan
pickle.dumps(obj)objek Python → bytesmengembalikan bytes (bukan str)
pickle.loads(b)bytes → objek Pythonhanya sumber terpercaya
pickle.dump(obj, file)tulis ke filebuka dalam mode binary open(..., "wb")
pickle.load(file)baca dari filebuka dalam mode binary open(..., "rb")

Konversi dictionary nilai ke bytes dengan pickle dan cek tipe kembaliannya. Bytes pickle dapat bervariasi panjangnya antar environment, jadi kita akan memverifikasi via type.

① Import modul pickle.

② Siapkan dictionary {"name": "Budi", "scores": [80, 90, 75]} di variabel bernama data.

③ Konversi data ke bytes dengan pickle, simpan di pickled, dan cetak nama tipe sebagai Tipe: ◯◯ (seharusnya bytes).

(Jika kamu menjalankannya dengan benar, penjelasan akan muncul.)

Python Editor

Jalankan kode untuk melihat output

Pulihkan pickled yang kamu buat di Latihan 1 kembali ke objek Python dan verifikasi cocok persis dengan data asli. Variabel data dan pickled dari Latihan 1 masih tersedia, jadi kamu hanya perlu menulis langkah pemulihan.

④ Pulihkan pickled dengan pickle.loads ke variabel bernama restored.

⑤ Cetak Nama dipulihkan: ◯◯ (field name dari objek yang dipulihkan) dan Sama dengan asli: True / False untuk pengecekan kesetaraan.

Python Editor

Jalankan kode untuk melihat output

base64 — Pindahkan Data Binary Lewat Teks

base64 adalah modul yang mengkonversi data binary sembarang menjadi string "alfanumerik plus dua simbol". Karena 3 bytes menjadi 4 karakter, ukuran tumbuh sekitar 1,33×, tetapi banyak dipakai dalam situasi di mana kamu perlu membawa data binary lewat channel teks-saja, seperti lampiran email, menyisipkan gambar di JSON atau URL, atau menyimpan bytes di SQL.

Dua API dasar:

FungsiInputMengembalikan
base64.b64encode(bytes)bytes (data sumber)bytes ter-encode Base64
base64.b64decode(Base64)bytes / str (bentuk Base64)bytes asli
Empat kegunaan tipikal base64
gambar di JSON / HTMLdata:image/png;base64,…lampiran emailmekanisme MIMEtoken JWT(autentikasi web)encoding payloadsertifikat di env vardata multi-baris di satu baris
Menyisipkan gambar di JSON / HTML (data URL) / lampiran email (MIME) / payload token JWT (JSON Web Token — token autentikasi web yang membawa info pengguna dengan deteksi tampering) / memasukkan sertifikat ke env var atau file config. Benang merahnya adalah memindahkan binary lewat channel teks-saja.
Cara kerja base64
data binaryb"Python is fun!"b64encodestring Base64UHl0aG9uIGlzIGZ1biE=string Base64UHl0aG9uIGlzIGZ1biE=b64decodedata binaryb"Python is fun!"encodedecode
Baris atas: encode = arah data binary → string Base64. Baris bawah: decode = arah string Base64 → data binary asli. Secara internal, 3 bytes dipecah menjadi empat chunk 6-bit yang dipetakan ke A–Z / a–z / 0–9 / + / / (64 karakter); jumlah karakter tumbuh menjadi 4/3 dari aslinya, dengan padding = untuk kekurangan.
import base64

# bytes → Base64
binary = b"Python is fun!"
encoded = base64.b64encode(binary)
print(encoded)              # b'UHl0aG9uIGlzIGZ1biE='
print(encoded.decode())     # UHl0aG9uIGlzIGZ1biE= (dikonversi ke str)

# Base64 → bytes
decoded = base64.b64decode(encoded)
print(decoded)              # b'Python is fun!'
print(decoded == binary)    # True

Untuk URL, pakai urlsafe_b64

b64encode standar memuat + dan /, jadi menyisipkannya langsung ke URL atau kunci JSON membutuhkan escape. Untuk URL dan JSON, pilih base64.urlsafe_b64encode — ia menukar +- dan /_ untuk memberikan varian yang URL-safe. Pakai base64.urlsafe_b64decode untuk memulihkan.

Encode bytes string dengan Base64, decode lagi, dan verifikasi hasilnya cocok dengan asli.

① Import modul base64.

② Siapkan bytes string b"Python is fun!".

③ Jangan cetak bytes ter-encode Base64 sebagai bytes — konversi ke string ASCII dulu dan cetak sebagai String Base64: ◯◯.

④ Decode Base64 kembali ke binary asli dan cetak apakah cocok dengan asli sebagai Sama dengan asli: True / False.

Python Editor

Jalankan kode untuk melihat output
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Apa bahaya memanggil pickle.loads pada data pickle yang tidak terpercaya?

Soal 2Apa tipe nilai kembalian pickle.dumps(obj)?

Soal 3Fungsi mana yang terbaik ketika kamu ingin meletakkan string base64 di parameter query URL?