Was ist das PICKLE-Dateiformat?
Dateien mit der Erweiterung .pickle speichern Python-Objekte, die mit dem pickle-Modul, der integrierten Bibliothek zur Objektserialisierung von Python, serialisiert wurden. Sowohl .pickle als auch .pkl sind austauschbare Erweiterungen für dasselbe Format; .pickle ist die längere, explizite Form, während .pkl die kompakte Variante mit drei Zeichen ist, die seit Python 1.x verwendet wird.
Inhalt von Python Pickle-Dateien
Serialisierte Objekte in .pickle-Dateien können von jedem Python-Typ sein. .pickle-Dateien werden verwendet, um Datenbankobjekte zu serialisieren, Gewichte von Machine-Learning-Modellen zwischenzuspeichern oder den Programmstatus zwischen Durchläufen zu speichern. Es sollten nur .pickle-Dateien aus vertrauenswürdigen Quellen verwendet werden, da solche Dateien Schadsoftware enthalten können - das Deserialisieren eines nicht vertrauenswürdigen Pickles kann beliebigen Python-Code ausführen. Pickle-Objekte können extern mit gzip, bz2 oder lzma komprimiert werden.
Wie werden Python PICKLE-Dateien erstellt?
Der Serialisierungsprozess wird als „Pickling“ bezeichnet und erfolgt über die Methoden dump() und dumps(). Die Methode dump() wird zum Serialisieren eines Objekts in eine Datei verwendet, während dumps() das Objekt als Bytes-Objekt speichert. Die Deserialisierung - das Zurückverwandeln des Byte-Streams in das ursprüngliche Objekt - erfolgt mit load() und loads(); dieser Vorgang wird als „Unpickling“ bezeichnet.
Die Version des Pickle-Protokolls steuert das Binärformat. Protokoll 0 ist menschenlesbares ASCII; die Protokolle 1-5 sind zunehmend binär, wobei Protokoll 5 (Python 3.8+) Out-of-Band-Puffer für die effiziente Handhabung großer .NPY-Arrays hinzufügt. In Machine-Learning-Workflows wird .pickle häufig verwendet, um scikit-learn-Modelle und PyTorch-Checkpoints zu persistieren, obwohl SafeTensors als sicherere Alternative speziell für Modellgewichte zunehmend an Bedeutung gewinnt.
Sicherheit
RISIKO: HIGHKRITISCHE WARNUNG: Pickle-Dateien können beim Laden beliebigen Python-Code ausführen. Eine bösartige .pickle-Datei kann Dateien löschen, Malware herunterladen oder ein System übernehmen. Laden Sie niemals eine Pickle-Datei aus einer nicht vertrauenswürdigen Quelle. In ML/KI-Workflows sind bösartige Pickles in Modell-Repositories (Hugging Face Hub, GitHub) ein aktiver Bedrohungsvektor. Verwenden Sie picklescan, um Dateien vor dem Laden zu scannen, oder wechseln Sie für Modellgewichte zum SafeTensors-Format. CVE-2025-1889: picklescan < 0.0.22 konnte durch die Verwendung nicht standardmäßiger Dateierweiterungen innerhalb archivbasierter Modellpakete umgangen werden.
Formatdetails
kurz gefasstProgramme zum Öffnen von PICKLE-Dateien
import pickle; data = pickle.load(open('file.pickle','rb')); print(data) Technische Details
technische Spezifikation| Dateikodierung | Binär (Protokolle 1-5); menschenlesbare ASCII-Opcodes (Protokoll 0) |
| Magic Bytes | 0x80 gefolgt vom Protokollversions-Byte; z. B. 0x80 0x05 für Protokoll 5 (Python 3.8+); Protokoll 0 hat kein binäres Magic |
| Pickle-Protokolle | 0 (ASCII, Python 1.x); 1 (binär, Python 1.x); 2 (New-Style-Klassen, Python 2.3+); 3 (Bytes, Python 3.0+); 4 (Objekte >4 GB, Python 3.4+); 5 (Out-of-Band-Puffer, Python 3.8+) |
| Standardprotokoll | Protokoll 5 ist der Standard in Python 3.8 und neuer |
| Komprimierung | Keine integriert; häufig extern in gzip, bz2 oder lzma verpackt; joblib fügt eine eigene Komprimierungsschicht hinzu |
| Verschlüsselung | Keine - keine integrierte Verschlüsselung; bei Bedarf auf Dateisystem- oder Wrapper-Ebene verschlüsseln |
| Typische Dateigröße | Unter 1 MB für Modellkonfigurationen; 1 MB - mehrere GB für ML-Modellgewichte und große Datensätze |
| Sicherheitsrisiko | Das Deserialisieren nicht vertrauenswürdiger Pickle-Daten kann über __reduce__-Hooks beliebigen Python-Code ausführen - niemals Dateien aus nicht vertrauenswürdigen Quellen entpacken |
| Interne Struktur | Stream von Pickle-Opcodes, die Python-Objekte rekursiv kodieren; Protokoll 4+ verwendet Frames für Chunked-Streaming; Protokoll 5 fügt Out-of-Band-Puffer für Zero-Copy großer Arrays hinzu |
| MIME-Typ | application/octet-stream (formal); application/x-pickle (informell) |
| Plattformübergreifend | Plattformunabhängig; läuft auf jedem von Python unterstützten Betriebssystem (Windows, Linux, macOS) |
| Serialisierungs-API | dump() und dumps() für das Pickling; load() und loads() für das Unpickling |
| ML/KI-Nutzung | Primäres Serialisierungsformat für scikit-learn-Modelle und PyTorch-Checkpoints; SafeTensors wird als sicherere Alternative für Modellgewichte zunehmend eingesetzt |
| Veröffentlicht | 1994 (Python 1.1; pickle module first released) |
| Neueste Version | Protocol 5 (Python 3.8, 2019); default protocol 5 from Python 3.14 |
| Offener Standard | Ja · lizenzgebührenfrei |
| Spezifikation | docs.python.org |
PICKLE-Konvertierungen
Community Q&A
von Nutzern gefragtNoch keine Fragen - stellen Sie die erste Frage zu PICKLE-Dateien.
Häufig gestellte Fragen
Wie öffne ich eine .pickle-Datei?
import pickle; data = pickle.load(open('file.pickle', 'rb')). Laden Sie nur Dateien aus vertrauenswürdigen Quellen - Pickle kann beliebigen Code ausführen.Was ist der Unterschied zwischen .pickle und .pkl?
Sind Pickle-Dateien sicher zu öffnen?
Kann ich eine Pickle-Datei in JSON konvertieren?
json.dump(pickle.load(open('file.pickle','rb')), open('out.json','w')). Komplexe Objekte (NumPy-Arrays, Klasseninstanzen) erfordern benutzerdefinierte Serialisierer.Welches Python-Protokoll sollte ich beim Speichern eines Pickles verwenden?
protocol=5 (Python 3.8+) für die beste Leistung bei großen Datenmengen, insbesondere NumPy-Arrays. Verwenden Sie protocol=2, wenn Sie Kompatibilität mit Python 2 benötigen. Geben Sie dies mit pickle.dump(obj, f, protocol=5) an.Warum ist meine Pickle-Datei so groß?
pickle.dump(obj, gzip.open('file.pkl.gz','wb')) oder wechseln Sie zu SafeTensors/HDF5.Kann ich eine Pickle-Datei in Excel oder einer Tabellenkalkulation öffnen?
df.to_csv('out.csv').