How can I find out / print with which version of the protocol a pickle file has been generated












2















In some cases, when I load an existing pickle file, and after that dump it again, the size is almost halved.



I wonder why, and the first suspect is the protocol version.
Can I somehow find out with which protocol version a file was pickled?










share|improve this question























  • The protocol version of the pickle is detected automatically, so no protocol argument is needed. Bytes past the pickled object’s representation are ignored. source: link

    – Alexander
    Nov 22 '18 at 12:41











  • Indeed it is detected automatically. Still I'd like to know it, to find out if the factor 2 "shrink" is due to the protocol version or to information loss by some error in my application.

    – Jacques de Hooge
    Nov 22 '18 at 12:50


















2















In some cases, when I load an existing pickle file, and after that dump it again, the size is almost halved.



I wonder why, and the first suspect is the protocol version.
Can I somehow find out with which protocol version a file was pickled?










share|improve this question























  • The protocol version of the pickle is detected automatically, so no protocol argument is needed. Bytes past the pickled object’s representation are ignored. source: link

    – Alexander
    Nov 22 '18 at 12:41











  • Indeed it is detected automatically. Still I'd like to know it, to find out if the factor 2 "shrink" is due to the protocol version or to information loss by some error in my application.

    – Jacques de Hooge
    Nov 22 '18 at 12:50
















2












2








2








In some cases, when I load an existing pickle file, and after that dump it again, the size is almost halved.



I wonder why, and the first suspect is the protocol version.
Can I somehow find out with which protocol version a file was pickled?










share|improve this question














In some cases, when I load an existing pickle file, and after that dump it again, the size is almost halved.



I wonder why, and the first suspect is the protocol version.
Can I somehow find out with which protocol version a file was pickled?







python pickle






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 22 '18 at 12:32









Jacques de HoogeJacques de Hooge

5,05521430




5,05521430













  • The protocol version of the pickle is detected automatically, so no protocol argument is needed. Bytes past the pickled object’s representation are ignored. source: link

    – Alexander
    Nov 22 '18 at 12:41











  • Indeed it is detected automatically. Still I'd like to know it, to find out if the factor 2 "shrink" is due to the protocol version or to information loss by some error in my application.

    – Jacques de Hooge
    Nov 22 '18 at 12:50





















  • The protocol version of the pickle is detected automatically, so no protocol argument is needed. Bytes past the pickled object’s representation are ignored. source: link

    – Alexander
    Nov 22 '18 at 12:41











  • Indeed it is detected automatically. Still I'd like to know it, to find out if the factor 2 "shrink" is due to the protocol version or to information loss by some error in my application.

    – Jacques de Hooge
    Nov 22 '18 at 12:50



















The protocol version of the pickle is detected automatically, so no protocol argument is needed. Bytes past the pickled object’s representation are ignored. source: link

– Alexander
Nov 22 '18 at 12:41





The protocol version of the pickle is detected automatically, so no protocol argument is needed. Bytes past the pickled object’s representation are ignored. source: link

– Alexander
Nov 22 '18 at 12:41













Indeed it is detected automatically. Still I'd like to know it, to find out if the factor 2 "shrink" is due to the protocol version or to information loss by some error in my application.

– Jacques de Hooge
Nov 22 '18 at 12:50







Indeed it is detected automatically. Still I'd like to know it, to find out if the factor 2 "shrink" is due to the protocol version or to information loss by some error in my application.

– Jacques de Hooge
Nov 22 '18 at 12:50














1 Answer
1






active

oldest

votes


















2














There may be a more elegant way but to get down to the metal you can use pickletools:



import pickle
import pickletools
s = pickle.dumps('Test')
proto_op = next(pickletools.genops(s))
assert proto_op[0].name == 'PROTO'
proto_ver = proto_op[1]


To figure out the version required to decode this, you'll need to maximum protocol version of each opcode:



proto_ver = max(op[0].proto for op in pickletools.genops(s))





share|improve this answer
























  • That helps me out!

    – Jacques de Hooge
    Nov 22 '18 at 12:52











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53431125%2fhow-can-i-find-out-print-with-which-version-of-the-protocol-a-pickle-file-has%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









2














There may be a more elegant way but to get down to the metal you can use pickletools:



import pickle
import pickletools
s = pickle.dumps('Test')
proto_op = next(pickletools.genops(s))
assert proto_op[0].name == 'PROTO'
proto_ver = proto_op[1]


To figure out the version required to decode this, you'll need to maximum protocol version of each opcode:



proto_ver = max(op[0].proto for op in pickletools.genops(s))





share|improve this answer
























  • That helps me out!

    – Jacques de Hooge
    Nov 22 '18 at 12:52
















2














There may be a more elegant way but to get down to the metal you can use pickletools:



import pickle
import pickletools
s = pickle.dumps('Test')
proto_op = next(pickletools.genops(s))
assert proto_op[0].name == 'PROTO'
proto_ver = proto_op[1]


To figure out the version required to decode this, you'll need to maximum protocol version of each opcode:



proto_ver = max(op[0].proto for op in pickletools.genops(s))





share|improve this answer
























  • That helps me out!

    – Jacques de Hooge
    Nov 22 '18 at 12:52














2












2








2







There may be a more elegant way but to get down to the metal you can use pickletools:



import pickle
import pickletools
s = pickle.dumps('Test')
proto_op = next(pickletools.genops(s))
assert proto_op[0].name == 'PROTO'
proto_ver = proto_op[1]


To figure out the version required to decode this, you'll need to maximum protocol version of each opcode:



proto_ver = max(op[0].proto for op in pickletools.genops(s))





share|improve this answer













There may be a more elegant way but to get down to the metal you can use pickletools:



import pickle
import pickletools
s = pickle.dumps('Test')
proto_op = next(pickletools.genops(s))
assert proto_op[0].name == 'PROTO'
proto_ver = proto_op[1]


To figure out the version required to decode this, you'll need to maximum protocol version of each opcode:



proto_ver = max(op[0].proto for op in pickletools.genops(s))






share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 22 '18 at 12:49









user2722968user2722968

2,70911637




2,70911637













  • That helps me out!

    – Jacques de Hooge
    Nov 22 '18 at 12:52



















  • That helps me out!

    – Jacques de Hooge
    Nov 22 '18 at 12:52

















That helps me out!

– Jacques de Hooge
Nov 22 '18 at 12:52





That helps me out!

– Jacques de Hooge
Nov 22 '18 at 12:52




















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53431125%2fhow-can-i-find-out-print-with-which-version-of-the-protocol-a-pickle-file-has%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

MongoDB - Not Authorized To Execute Command

How to fix TextFormField cause rebuild widget in Flutter

in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith