2
如何識別字節串對象是否是一個pickle對象。如何識別一個字節字符串是否是一個pickle對象?
例如,在下面的字典中,我如何識別b
是一個醃製對象,而其他對象不是?
example = {'a':1, 'b':b'\x80\x03K\x02.', 'c':b'3'}
如何識別字節串對象是否是一個pickle對象。如何識別一個字節字符串是否是一個pickle對象?
例如,在下面的字典中,我如何識別b
是一個醃製對象,而其他對象不是?
example = {'a':1, 'b':b'\x80\x03K\x02.', 'c':b'3'}
雖然有很多方法可以判斷它是否是可能一個流是泡菜流(例如第一字節總是\x80
,其次是協議號,這裏\x03
,最後一個字節也總是一個b'.'
),通常很難確定(可能是偶然的,第一個字節是\x80
在一個隨機字符串中)。所以你最好只是嘗試unpickle,看看是否可以算出:
import pickle
def is_pickle_stream(stream):
try:
pickle.loads(stream)
return True
except UnpicklingError:
return False
上述方法將返回True
如果流是泡菜流,False
如果不是,並拋出一個異常,如果loads
拋出異常(內存不足等)。
您可以嘗試取下它,如果失敗,則將其視爲未撥號的數據。 Pickle有一個標題,但可能巧合的是,二進制字符串具有相同的標題。 –
[*「請求原諒比允許更容易。」*](https://docs.python.org/3/glossary.html#term-eafp) – jonrsharpe