Hvad er PICKLE-filformatet?
Filer med filtypenavnet .pickle gemmer Python-objekter serialiseret ved hjælp af pickle-modulet, Pythons indbyggede bibliotek til objektserialisering. Både .pickle og .pkl er udskiftelige filtypenavne for det samme format; .pickle er den længere eksplicitte form, mens .pkl er den kompakte variant på tre tegn, der har været i brug siden Python 1.x.
Indhold af Python Pickle-filer
Serialiserede objekter i .pickle-filer kan være af enhver Python-type. .pickle-filer bruges til at serialisere databaseobjekter, cache vægte fra maskinlæringsmodeller eller gemme programtilstande mellem kørsler. Kun .pickle-filer fra betroede kilder bør anvendes, da sådanne filer kan indeholde ondsindet software - deserialisering af en upålidelig pickle kan eksekvere vilkårlig Python-kode. Pickle-objekter kan komprimeres eksternt ved hjælp af gzip, bz2 eller lzma.
Hvordan oprettes Python PICKLE-filer?
Serialiseringsprocessen kaldes „pickling“ og udføres ved hjælp af metoderne dump() og dumps(). Metoden dump() bruges til at serialisere et objekt til en fil, mens dumps() gemmer objektet som et bytes-objekt. Deserialisering - konvertering af byte-strømmen tilbage til det oprindelige objekt - gøres ved hjælp af load() og loads(); denne proces kaldes „unpickling“.
Pickle-protokolversionen styrer det binære format. Protokol 0 er menneskelæsbar ASCII; Protokol 1-5 er progressivt binære, hvor Protokol 5 (Python 3.8+) tilføjer out-of-band buffere til effektiv håndtering af store .NPY-arrays. I workflows til maskinlæring er .pickle meget udbredt til at gemme scikit-learn-modeller og PyTorch-checkpoints, selvom SafeTensors vinder frem som et sikrere alternativ specifikt til modelvægte.
Sikkerhed og tryghed
RISIKO: HIGHKRITISK ADVARSEL: Pickle-filer kan eksekvere vilkårlig Python-kode, når de indlæses. En ondsindet .pickle-fil kan slette filer, downloade malware eller overtage et system. Indlæs aldrig en pickle-fil fra en upålidelig kilde. I ML/AI-workflows er ondsindede pickles i model-repositories (Hugging Face Hub, GitHub) en aktiv trusselsvektor. Brug picklescan til at scanne filer før indlæsning, eller skift til SafeTensors-formatet for modelvægte. CVE-2025-1889: picklescan < 0.0.22 kunne omgås ved at bruge ikke-standard filtypenavne i arkivbaserede modelpakker.
Formatdetaljer
kort fortaltProgrammer der åbner PICKLE-filer
import pickle; data = pickle.load(open('file.pickle','rb')); print(data) Tekniske detaljer
dyb specifikation| Filkodning | Binær (protokol 1-5); menneskelæsbare ASCII-opkoder (protokol 0) |
| Magic bytes | 0x80 efterfulgt af protokolversions-byte; f.eks. 0x80 0x05 for protokol 5 (Python 3.8+); protokol 0 har ingen binær magic |
| Pickle-protokoller | 0 (ASCII, Python 1.x); 1 (binær, Python 1.x); 2 (new-style klasser, Python 2.3+); 3 (bytes, Python 3.0+); 4 (objekter >4 GB, Python 3.4+); 5 (out-of-band buffere, Python 3.8+) |
| Standardprotokol | Protokol 5 er standarden i Python 3.8 og nyere |
| Komprimering | Ingen indbygget; pakkes ofte eksternt i gzip, bz2 eller lzma; joblib tilføjer sit eget komprimeringslag |
| Kryptering | Ingen - ingen indbygget kryptering; krypter på filsystem- eller wrapperniveau efter behov |
| Typisk filstørrelse | Under 1 MB for modelkonfigurationer; 1 MB - flere GB for ML-modelvægte og store datasæt |
| Sikkerhedsrisiko | Deserialisering af upålidelige pickle-data kan eksekvere vilkårlig Python-kode via __reduce__ hooks - unpickle aldrig filer fra upålidelige kilder |
| Intern struktur | Strøm af pickle-opkoder, der koder Python-objekter rekursivt; Protokol 4+ bruger frames til chunked streaming; Protokol 5 tilføjer out-of-band buffere for zero-copy af store arrays |
| MIME-type | application/octet-stream (formelt); application/x-pickle (uformelt) |
| Platformsuafhængig | Platformsuafhængig; kører på ethvert Python-understøttet operativsystem (Windows, Linux, macOS) |
| Serialiserings-API | dump() og dumps() til pickling; load() og loads() til unpickling |
| ML/AI-anvendelse | Primært serialiseringsformat for scikit-learn-modeller og PyTorch-checkpoints; SafeTensors vinder frem som et sikrere alternativ til modelvægte |
| Udgivet | 1994 (Python 1.1; pickle module first released) |
| Seneste version | Protocol 5 (Python 3.8, 2019); default protocol 5 from Python 3.14 |
| Åben standard | Ja · royaltyfri |
| Specifikation | docs.python.org |
PICKLE-konverteringer
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om PICKLE-filer.
Ofte stillede spørgsmål
Hvordan åbner jeg en .pickle-fil?
import pickle; data = pickle.load(open('file.pickle', 'rb')). Indlæs kun filer fra betroede kilder - pickle kan eksekvere vilkårlig kode.Hvad er forskellen på .pickle og .pkl?
Er pickle-filer sikre at åbne?
Kan jeg konvertere en pickle-fil til JSON?
json.dump(pickle.load(open('file.pickle','rb')), open('out.json','w')). Komplekse objekter (NumPy-arrays, klasseinstanser) kræver brugerdefinerede serialisatorer.Hvilken Python-protokol skal jeg bruge, når jeg gemmer en pickle?
protocol=5 (Python 3.8+) for den bedste ydeevne med store data, især NumPy-arrays. Brug protocol=2, hvis du har brug for kompatibilitet med Python 2. Angiv det med pickle.dump(obj, f, protocol=5).Hvorfor er min pickle-fil så stor?
pickle.dump(obj, gzip.open('file.pkl.gz','wb')) eller skifte til SafeTensors/HDF5.Kan jeg åbne en pickle-fil i Excel eller et regneark?
df.to_csv('out.csv').