How can I find out / print with which version of the protocol a pickle file has been generated
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
add a comment |
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
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
add a comment |
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
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
python pickle
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
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))
That helps me out!
– Jacques de Hooge
Nov 22 '18 at 12:52
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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))
That helps me out!
– Jacques de Hooge
Nov 22 '18 at 12:52
add a comment |
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))
That helps me out!
– Jacques de Hooge
Nov 22 '18 at 12:52
add a comment |
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))
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))
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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