Wat is het PICKLE-bestandsformaat?
Bestanden met de extensie .pickle slaan Python-objecten op die zijn geserialiseerd met de pickle-module, de ingebouwde bibliotheek voor objectserialisatie van Python. Zowel .pickle als .pkl zijn uitwisselbare extensies voor hetzelfde formaat; .pickle is de langere expliciete vorm, terwijl .pkl de compacte variant van drie tekens is die sinds Python 1.x in gebruik is.
Inhoud van Python Pickle-bestanden
Geserialiseerde objecten in .pickle-bestanden kunnen van elk Python-type zijn. .pickle-bestanden worden gebruikt om database-objecten te serialiseren, gewichten van machine-learningmodellen te cachen of de programmastatus tussen sessies op te slaan. Alleen .pickle-bestanden van vertrouwde bronnen mogen worden gebruikt, aangezien dergelijke bestanden kwaadaardige software kunnen bevatten - het deserialiseren van een onbetrouwbare pickle kan willekeurige Python-code uitvoeren. Pickle-objecten kunnen extern worden gecomprimeerd met gzip, bz2 of lzma.
Hoe worden Python PICKLE-bestanden gemaakt?
Het serialisatieproces wordt „pickling” genoemd en wordt uitgevoerd met de methoden dump() en dumps(). De methode dump() wordt gebruikt om een object naar een bestand te serialiseren, terwijl dumps() het object opslaat als een bytes-object. Deserialisatie - het terug converteren van de bytestroom naar het oorspronkelijke object - gebeurt met load() en loads(); dit proces wordt aangeduid als „unpickling”.
De versie van het pickle-protocol bepaalt het binaire formaat. Protocol 0 is voor mensen leesbare ASCII; Protocollen 1-5 zijn progressief binair, waarbij Protocol 5 (Python 3.8+) out-of-band buffers toevoegt voor een efficiënte verwerking van grote .NPY-arrays. In machine-learning workflows wordt .pickle veel gebruikt om scikit-learn-modellen en PyTorch-checkpoints op te slaan, hoewel SafeTensors aan populariteit wint als een veiliger alternatief voor specifiek modelgewichten.
Beveiliging & veiligheid
RISICO: HIGHKRITIEKE WAARSCHUWING: Pickle-bestanden kunnen willekeurige Python-code uitvoeren wanneer ze worden geladen. Een kwaadaardig .pickle-bestand kan bestanden verwijderen, malware downloaden of een systeem overnemen. Laad nooit een pickle-bestand van een onbetrouwbare bron. In ML/AI-workflows zijn kwaadaardige pickles in model-repositories (Hugging Face Hub, GitHub) een actieve dreiging. Gebruik picklescan om bestanden te scannen voordat u ze laadt, of stap over op het SafeTensors-formaat voor modelgewichten. CVE-2025-1889: picklescan < 0.0.22 kon worden omzeild door niet-standaard bestandsextensies te gebruiken binnen op archieven gebaseerde modelpakketten.
Formaatdetails
in een notendopProgramma's die PICKLE-bestanden openen
import pickle; data = pickle.load(open('file.pickle','rb')); print(data) Technische details
diepe specificaties| Bestandscodering | Binair (protocollen 1-5); voor mensen leesbare ASCII-opcodes (protocol 0) |
| Magic bytes | 0x80 gevolgd door protocolversie-byte; bijv. 0x80 0x05 voor protocol 5 (Python 3.8+); protocol 0 heeft geen binaire magic |
| Pickle-protocollen | 0 (ASCII, Python 1.x); 1 (binair, Python 1.x); 2 (new-style klassen, Python 2.3+); 3 (bytes, Python 3.0+); 4 (objecten >4 GB, Python 3.4+); 5 (out-of-band buffers, Python 3.8+) |
| Standaardprotocol | Protocol 5 is de standaard in Python 3.8 en later |
| Compressie | Geen ingebouwd; vaak extern verpakt in gzip, bz2 of lzma; joblib voegt een eigen compressielaag toe |
| Versleuteling | Geen - geen ingebouwde versleuteling; versleutel indien nodig op bestandssysteem- of wrapperniveau |
| Typische bestandsgrootte | Onder 1 MB voor modelconfiguraties; 1 MB - verscheidene GB voor ML-modelgewichten en grote datasets |
| Beveiligingsrisico | Het deserialiseren van onbetrouwbare pickle-gegevens kan willekeurige Python-code uitvoeren via __reduce__ hooks - unpickle nooit bestanden van onbetrouwbare bronnen |
| Interne structuur | Stroom van pickle-opcodes die Python-objecten recursief coderen; Protocol 4+ gebruikt frames voor gestreamde brokken; Protocol 5 voegt out-of-band buffers toe voor zero-copy van grote arrays |
| MIME-type | application/octet-stream (formeel); application/x-pickle (informeel) |
| Platformonafhankelijk | Platformonafhankelijk; draait op elk door Python ondersteund besturingssysteem (Windows, Linux, macOS) |
| Serialisatie-API | dump() en dumps() voor pickling; load() en loads() voor unpickling |
| ML/AI-gebruik | Primair serialisatieformaat voor scikit-learn-modellen en PyTorch-checkpoints; SafeTensors wint aan populariteit als veiliger alternatief voor modelgewichten |
| Uitgebracht | 1994 (Python 1.1; pickle module first released) |
| Laatste versie | Protocol 5 (Python 3.8, 2019); default protocol 5 from Python 3.14 |
| Open standaard | Ja · royaltyvrij |
| Specificatie | docs.python.org |
PICKLE conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over PICKLE-bestanden.
Veelgestelde vragen
Hoe open ik een .pickle-bestand?
import pickle; data = pickle.load(open('file.pickle', 'rb')). Laad alleen bestanden van vertrouwde bronnen - pickle kan willekeurige code uitvoeren.Wat is het verschil tussen .pickle en .pkl?
Zijn pickle-bestanden veilig om te openen?
picklescan.Kan ik een pickle-bestand naar JSON converteren?
json.dump(pickle.load(open('file.pickle','rb')), open('out.json','w')). Complexe objecten (NumPy-arrays, klasse-instanties) vereisen aangepaste serializers.Welk Python-protocol moet ik gebruiken bij het opslaan van een pickle?
protocol=5 (Python 3.8+) voor de beste prestaties met grote gegevens, vooral NumPy-arrays. Gebruik protocol=2 als u compatibiliteit met Python 2 nodig heeft. Specificeer dit met pickle.dump(obj, f, protocol=5).Waarom is mijn pickle-bestand zo groot?
pickle.dump(obj, gzip.open('file.pkl.gz','wb')) of stap over naar SafeTensors/HDF5.Kan ik een pickle-bestand openen in Excel of een spreadsheet?
df.to_csv('out.csv').