pickle
とdbm
を一緒に使用してください。このコードpython2とのpython3上で動作します(Raspbian Linux上でテストした)
import pickle
import dbm
OBJECTS = (
'string1',
'string2',
)
def store():
db = dbm.open('test','c')
index = 0
for ob in OBJECTS:
db[str(index)] = pickle.dumps(ob)
index += 1
db['N'] = str(index) # store object count
db.close()
def load():
db = dbm.open('test','r')
nb = int(db['N'])
while nb>0:
nb -= 1
ob = pickle.loads(db[str(nb)])
print (ob)
db.close()
store()
load()
キー 'N' を多くのオブジェクトが格納されている方法について説明します。これは、非常に多数のオブジェクトに対して機能するはずです。
これは文字列に限定されるものではない
編集、それはまた、pickle
がシリアライズできることを任意のオブジェクトで動作します。たとえば、次のように書くことができます。
OBJECTS = (
('A', 'b', '123'),
'SomeString',
{1: 'ABC', 2:((1,2),(3,4)), 3: [9,8,7,6]},
[[],[1],[2,3],[4,5,6]],
)
Thanks @ sci-prog!これは私のニーズに合っていません。なぜなら、文字列ではなく配列を格納するからです。私の最初の質問はより明確になり、おもちゃの例はあまりおもしろくなくてはなりませんでしたが、dbmの提案は正しい方向に向いています。私はPythonのshelveまたはsqlite3を使用して終了すると思います。 – itf
これはリストで動作します(実際には、 'pickle'がシリアル化できるオブジェクトで)。私の編集を参照してください。しかし、他の "データパーシスタンス"モジュールを使用するあなたのソリューションも動作するはずです。 –