Modul pickle mengimplementasikan protokol biner untuk serialisasi dan deserialisasi struktur objek Python. Serialisasi adalah proses mengubah objek di memori menjadi aliran byte yang dapat disimpan di disk atau dikirim melalui jaringan. Deserialisasi adalah proses mengubah aliran byte menjadi objek Python Show
Proses ini juga disebut pickling/unpickling atau marshalling/unmarshalling Modul with open('data.bin', 'wb') as f: pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)3 berisi alat untuk menganalisis aliran data yang dihasilkan oleh pickle Catatan. serialisasi data dengan modul pickle tidak aman. Dokumentasi tersebut menekankan bahwa kita tidak boleh membongkar data yang berasal dari sumber yang tidak tepercaya atau dikirimkan melalui jaringan yang tidak aman Serial acar pythonContoh berikut membuat serial data menjadi file biner #!/usr/bin/python import pickle data = { 'a': [1, 4.0, 3, 4+6j], 'b': ("a red fox", b"and old falcon"), 'c': {None, True, False} } with open('data.bin', 'wb') as f: pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)_ Kami memiliki kamus dari berbagai tipe data. Data diasamkan ke dalam file biner with open('data.bin', 'wb') as f: pickle.dump(data, f, pickle.HIGHEST_PROTOCOL) Fungsi with open('data.bin', 'wb') as f: pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)4 menulis representasi acar dari objek ke objek file. Seiring waktu beberapa protokol telah dikembangkan. Versi protokol menentukan kemampuan proses serialisasi. Dalam kode kami, kami memilih versi protokol tertinggi $ hexdump -C data.bin 00000000 80 05 95 75 00 00 00 00 00 00 00 7d 94 28 8c 01 |...u.......}.(..| 00000010 61 94 5d 94 28 4b 01 47 40 10 00 00 00 00 00 00 |a.].(K.G@.......| 00000020 4b 03 8c 08 62 75 69 6c 74 69 6e 73 94 8c 07 63 |K...builtins...c| 00000030 6f 6d 70 6c 65 78 94 93 94 47 40 10 00 00 00 00 |omplex...G@.....| 00000040 00 00 47 40 18 00 00 00 00 00 00 86 94 52 94 65 |[email protected]| 00000050 8c 01 62 94 8c 09 61 20 72 65 64 20 66 6f 78 94 |..b...a red fox.| 00000060 43 0e 61 6e 64 20 6f 6c 64 20 66 61 6c 63 6f 6e |C.and old falcon| 00000070 94 86 94 8c 01 63 94 8f 94 28 89 88 4e 90 75 2e |.....c...(..N.u.| 00000080_ File biner tidak dapat dibaca dengan editor teks sederhana; Pada contoh berikutnya, kami menghapus data dari file biner #!/usr/bin/python import pickle with open('data.bin', 'rb') as f: data = pickle.load(f) print(data) Fungsi with open('data.bin', 'wb') as f: pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)5 membaca representasi acar suatu objek dari objek file dan mengembalikan objek yang dibentuk kembali $ ./simple_read.py {'a': [1, 4.0, 3, (4+6j)], 'b': ('a red fox', b'and old falcon'), 'c': {False, True, None}} Kami telah berhasil membuat ulang objek kamus Tempat pembuangan/pemuatan acar pythonFungsi with open('data.bin', 'wb') as f: pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)6 mengembalikan representasi acar objek sebagai objek byte, alih-alih menulisnya ke file. Fungsi with open('data.bin', 'wb') as f: pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)7 mengembalikan hierarki objek yang dibentuk kembali dari data representasi acar dari suatu objek. Data harus berupa objek seperti byte #!/usr/bin/python import pickle data = [1, 2, 3, 4, 5] dumped = pickle.dumps(data) print(dumped) loaded = pickle.loads(dumped) print(loaded) Dalam contoh, kami membuat serial dan deserialisasi daftar Python dengan with open('data.bin', 'wb') as f: pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)6 dan with open('data.bin', 'wb') as f: pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)7 $ ./dumps_loads.py b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03K\x04K\x05e.' [1, 2, 3, 4, 5] Proses pengawetan dan pelepasan pengawetan dapat dipengaruhi oleh fungsi $ hexdump -C data.bin 00000000 80 05 95 75 00 00 00 00 00 00 00 7d 94 28 8c 01 |...u.......}.(..| 00000010 61 94 5d 94 28 4b 01 47 40 10 00 00 00 00 00 00 |a.].(K.G@.......| 00000020 4b 03 8c 08 62 75 69 6c 74 69 6e 73 94 8c 07 63 |K...builtins...c| 00000030 6f 6d 70 6c 65 78 94 93 94 47 40 10 00 00 00 00 |omplex...G@.....| 00000040 00 00 47 40 18 00 00 00 00 00 00 86 94 52 94 65 |[email protected]| 00000050 8c 01 62 94 8c 09 61 20 72 65 64 20 66 6f 78 94 |..b...a red fox.| 00000060 43 0e 61 6e 64 20 6f 6c 64 20 66 61 6c 63 6f 6e |C.and old falcon| 00000070 94 86 94 8c 01 63 94 8f 94 28 89 88 4e 90 75 2e |.....c...(..N.u.| 000000800 dan $ hexdump -C data.bin 00000000 80 05 95 75 00 00 00 00 00 00 00 7d 94 28 8c 01 |...u.......}.(..| 00000010 61 94 5d 94 28 4b 01 47 40 10 00 00 00 00 00 00 |a.].(K.G@.......| 00000020 4b 03 8c 08 62 75 69 6c 74 69 6e 73 94 8c 07 63 |K...builtins...c| 00000030 6f 6d 70 6c 65 78 94 93 94 47 40 10 00 00 00 00 |omplex...G@.....| 00000040 00 00 47 40 18 00 00 00 00 00 00 86 94 52 94 65 |[email protected]| 00000050 8c 01 62 94 8c 09 61 20 72 65 64 20 66 6f 78 94 |..b...a red fox.| 00000060 43 0e 61 6e 64 20 6f 6c 64 20 66 61 6c 63 6f 6e |C.and old falcon| 00000070 94 86 94 8c 01 63 94 8f 94 28 89 88 4e 90 75 2e |.....c...(..N.u.| 000000801. Fungsi $ hexdump -C data.bin 00000000 80 05 95 75 00 00 00 00 00 00 00 7d 94 28 8c 01 |...u.......}.(..| 00000010 61 94 5d 94 28 4b 01 47 40 10 00 00 00 00 00 00 |a.].(K.G@.......| 00000020 4b 03 8c 08 62 75 69 6c 74 69 6e 73 94 8c 07 63 |K...builtins...c| 00000030 6f 6d 70 6c 65 78 94 93 94 47 40 10 00 00 00 00 |omplex...G@.....| 00000040 00 00 47 40 18 00 00 00 00 00 00 86 94 52 94 65 |[email protected]| 00000050 8c 01 62 94 8c 09 61 20 72 65 64 20 66 6f 78 94 |..b...a red fox.| 00000060 43 0e 61 6e 64 20 6f 6c 64 20 66 61 6c 63 6f 6e |C.and old falcon| 00000070 94 86 94 8c 01 63 94 8f 94 28 89 88 4e 90 75 2e |.....c...(..N.u.| 000000800 dipanggil saat pengawetan dan fungsi $ hexdump -C data.bin 00000000 80 05 95 75 00 00 00 00 00 00 00 7d 94 28 8c 01 |...u.......}.(..| 00000010 61 94 5d 94 28 4b 01 47 40 10 00 00 00 00 00 00 |a.].(K.G@.......| 00000020 4b 03 8c 08 62 75 69 6c 74 69 6e 73 94 8c 07 63 |K...builtins...c| 00000030 6f 6d 70 6c 65 78 94 93 94 47 40 10 00 00 00 00 |omplex...G@.....| 00000040 00 00 47 40 18 00 00 00 00 00 00 86 94 52 94 65 |[email protected]| 00000050 8c 01 62 94 8c 09 61 20 72 65 64 20 66 6f 78 94 |..b...a red fox.| 00000060 43 0e 61 6e 64 20 6f 6c 64 20 66 61 6c 63 6f 6e |C.and old falcon| 00000070 94 86 94 8c 01 63 94 8f 94 28 89 88 4e 90 75 2e |.....c...(..N.u.| 000000801 saat pelepasan pengawetan blue, rock, water, sky, cloud, forest, hawk, falcon Ini adalah file $ hexdump -C data.bin 00000000 80 05 95 75 00 00 00 00 00 00 00 7d 94 28 8c 01 |...u.......}.(..| 00000010 61 94 5d 94 28 4b 01 47 40 10 00 00 00 00 00 00 |a.].(K.G@.......| 00000020 4b 03 8c 08 62 75 69 6c 74 69 6e 73 94 8c 07 63 |K...builtins...c| 00000030 6f 6d 70 6c 65 78 94 93 94 47 40 10 00 00 00 00 |omplex...G@.....| 00000040 00 00 47 40 18 00 00 00 00 00 00 86 94 52 94 65 |[email protected]| 00000050 8c 01 62 94 8c 09 61 20 72 65 64 20 66 6f 78 94 |..b...a red fox.| 00000060 43 0e 61 6e 64 20 6f 6c 64 20 66 61 6c 63 6f 6e |C.and old falcon| 00000070 94 86 94 8c 01 63 94 8f 94 28 89 88 4e 90 75 2e |.....c...(..N.u.| 00000080_4 red, green, blue, pink, orange Ini adalah file $ hexdump -C data.bin 00000000 80 05 95 75 00 00 00 00 00 00 00 7d 94 28 8c 01 |...u.......}.(..| 00000010 61 94 5d 94 28 4b 01 47 40 10 00 00 00 00 00 00 |a.].(K.G@.......| 00000020 4b 03 8c 08 62 75 69 6c 74 69 6e 73 94 8c 07 63 |K...builtins...c| 00000030 6f 6d 70 6c 65 78 94 93 94 47 40 10 00 00 00 00 |omplex...G@.....| 00000040 00 00 47 40 18 00 00 00 00 00 00 86 94 52 94 65 |[email protected]| 00000050 8c 01 62 94 8c 09 61 20 72 65 64 20 66 6f 78 94 |..b...a red fox.| 00000060 43 0e 61 6e 64 20 6f 6c 64 20 66 61 6c 63 6f 6e |C.and old falcon| 00000070 94 86 94 8c 01 63 94 8f 94 28 89 88 4e 90 75 2e |.....c...(..N.u.| 00000080_5 #!/usr/bin/python import pickle class MyData: def __init__(self, filename): self.name = filename self.fh = open(filename) def __getstate__(self): odict = self.__dict__.copy() print(odict) del odict['fh'] return odict def __setstate__(self, dict): fh = open(dict['name']) self.name = dict['name'] self.fh = fh obj = MyData('words.txt') res = pickle.loads(pickle.dumps(obj)) print(res.fh.read()) obj2 = MyData('colours.txt') res = pickle.loads(pickle.dumps(obj2)) print(res.fh.read()) Dalam contoh, kami menyimpan dan menghapus pegangan file di fungsi anggota $ hexdump -C data.bin 00000000 80 05 95 75 00 00 00 00 00 00 00 7d 94 28 8c 01 |...u.......}.(..| 00000010 61 94 5d 94 28 4b 01 47 40 10 00 00 00 00 00 00 |a.].(K.G@.......| 00000020 4b 03 8c 08 62 75 69 6c 74 69 6e 73 94 8c 07 63 |K...builtins...c| 00000030 6f 6d 70 6c 65 78 94 93 94 47 40 10 00 00 00 00 |omplex...G@.....| 00000040 00 00 47 40 18 00 00 00 00 00 00 86 94 52 94 65 |[email protected]| 00000050 8c 01 62 94 8c 09 61 20 72 65 64 20 66 6f 78 94 |..b...a red fox.| 00000060 43 0e 61 6e 64 20 6f 6c 64 20 66 61 6c 63 6f 6e |C.and old falcon| 00000070 94 86 94 8c 01 63 94 8f 94 28 89 88 4e 90 75 2e |.....c...(..N.u.| 000000801 dan $ hexdump -C data.bin 00000000 80 05 95 75 00 00 00 00 00 00 00 7d 94 28 8c 01 |...u.......}.(..| 00000010 61 94 5d 94 28 4b 01 47 40 10 00 00 00 00 00 00 |a.].(K.G@.......| 00000020 4b 03 8c 08 62 75 69 6c 74 69 6e 73 94 8c 07 63 |K...builtins...c| 00000030 6f 6d 70 6c 65 78 94 93 94 47 40 10 00 00 00 00 |omplex...G@.....| 00000040 00 00 47 40 18 00 00 00 00 00 00 86 94 52 94 65 |[email protected]| 00000050 8c 01 62 94 8c 09 61 20 72 65 64 20 66 6f 78 94 |..b...a red fox.| 00000060 43 0e 61 6e 64 20 6f 6c 64 20 66 61 6c 63 6f 6e |C.and old falcon| 00000070 94 86 94 8c 01 63 94 8f 94 28 89 88 4e 90 75 2e |.....c...(..N.u.| 000000800 with open('data.bin', 'wb') as f: pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)0 Acar python tidak amanModul $ hexdump -C data.bin 00000000 80 05 95 75 00 00 00 00 00 00 00 7d 94 28 8c 01 |...u.......}.(..| 00000010 61 94 5d 94 28 4b 01 47 40 10 00 00 00 00 00 00 |a.].(K.G@.......| 00000020 4b 03 8c 08 62 75 69 6c 74 69 6e 73 94 8c 07 63 |K...builtins...c| 00000030 6f 6d 70 6c 65 78 94 93 94 47 40 10 00 00 00 00 |omplex...G@.....| 00000040 00 00 47 40 18 00 00 00 00 00 00 86 94 52 94 65 |[email protected]| 00000050 8c 01 62 94 8c 09 61 20 72 65 64 20 66 6f 78 94 |..b...a red fox.| 00000060 43 0e 61 6e 64 20 6f 6c 64 20 66 61 6c 63 6f 6e |C.and old falcon| 00000070 94 86 94 8c 01 63 94 8f 94 28 89 88 4e 90 75 2e |.....c...(..N.u.| 000000808 tidak aman. Modulnya adalah mesin virtual yang menggunakan opcode yang telah ditentukan sebelumnya untuk melakukan tugasnya. Dengan menggunakan string biner yang dibuat khusus, penyerang dapat meluncurkan perintah sistem yang dapat merusak data atau meluncurkan shell terbalik Bagaimana cara membaca seluruh file biner dengan Python?Fungsi open() membuka file dalam format teks secara default. Untuk membuka file dalam format biner, tambahkan 'b' ke parameter mode . Oleh karena itu mode "rb" membuka file dalam format biner untuk dibaca, sedangkan mode "wb" membuka file dalam format biner untuk ditulis. Tidak seperti file teks, file biner tidak dapat dibaca manusia.
Bisakah kita membaca file biner dengan Python?Ilmu Data Praktis menggunakan Python
. Penunjuk file ditempatkan di awal file. Ini adalah mode default. Membuka file untuk membaca dan menulis dalam format biner. Opens a file for reading only in binary format. The file pointer is placed at the beginning of the file. This is the default mode. Opens a file for both reading and writing in binary format.
Metode modul pickle mana yang digunakan untuk membaca dari file biner?memuat() fungsi . Dalam modul pickle, fungsi load() digunakan untuk membaca data dari file biner atau objek file.
Apakah acar file biner?Modul pickle mengimplementasikan protokol biner untuk serialisasi dan de-serialisasi struktur objek Python.
Bagaimana Anda membaca file dengan acar?Gunakan perintah open() untuk membuka file dengan argumen 'rb' seperti yang ditunjukkan untuk membuka file dalam mode 'baca'. 'r' adalah singkatan dari mode membaca, dan 'b' adalah singkatan dari 'mode biner. ' Setelah membuka file, tetapkan itu ke variabel, lalu gunakan acar |