首先,loads貌似只能決議第一個資料,如果這串位元組是多個資料的話,后面的資料決議不到。
比較合理的方法是創建臨時檔案并用loads,但是這里我想知道loads真的沒有更方便的方法嗎?這里嘗試了兩種方法,一種是挨個位元組暴力嘗試,一個是再次dump,獲得長度,模擬load的指標移動。
但是loads沒有方法同時回傳一個決議長度嗎?
import pickle
f=b'\x80\x04\x95\x07\x00\x00\x00\x00\x00\x00\x00\x8c\x03123\x94.\x80\x04\x95\x07\x00\x00\x00\x00\x00\x00\x00\x8c\x03456\x94.'
for i in range(len(f)):
try:
j=pickle.loads(f[i:])
except:pass
else:print(j)
#
123
123
123
456
456
456
52.9 μs
同一個資料被決議三次
# %%timeit
import pickle
f=b'\x80\x04\x95\x07\x00\x00\x00\x00\x00\x00\x00\x8c\x03123\x94.\x80\x04\x95\x07\x00\x00\x00\x00\x00\x00\x00\x8c\x03456\x94.'
i=0
l=len(f)
while 1:
j=pickle.loads(f[i:])
print(j)
lj=len(pickle.dumps(j))
i+=lj
if i==l:break
#
123
456
3.35 μs
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/201718.html
