打印字典并将其保存到文件中,然后将其复制到py文件中使用?

Phi*_*hil 1 python google-app-engine python-2.7 webapp2

使用DB,我想创建一个非常大的字典.如果我将它保存到磁盘,当腌制时,它需要大约10 MB的空间.

我想做的是:

将此字典保存到磁盘,以打开该文本文档并将其复制到另一个py文件,以便每次每次通过Web应用程序调用py文档时都不必重新生成它,它是可迭代的.

我怎样才能做到这一点?

PS.我的应用程序正在Google应用引擎上运行,我想解决这个问题,以避免使用DB等资源.

asc*_*d00 6

通过文件api将其存储到blobstore中:

class YourDictModel(ndb.Model):
    data = ndb.BlobKeyProperty()

huge_dict = dict(...)

file_name = files.blobstore.create(mime_type='application/octet-stream')
with files.open(file_name, 'a') as f:
    f.write(marshal.dumps(huge_dict))

    # Finalize the file. Do this before attempting to read it.
    files.finalize(file_name)

    # Get the file's blob key
    blob_key = files.blobstore.get_blob_key(file_name)
    entity = YourDictModel(data = blob_key)

    entity.put()
Run Code Online (Sandbox Code Playgroud)

注意:

  • 您无法修改blob以便修改它,您需要将dict读入内存,删除blob,创建一个新的并替换模型上的键.
  • 字典越大,您就越有可能达到软流程大小限制.
  • 我使用元帅,但你可以使用泡菜,json或任何你喜欢的.

您无法从GAE SDK写入文件: 如何使用python和Google AppEngine编写或创建(如果不存在)文件

  • 对元帅的好称呼,它是三个中最快和最紧凑的。如果 blobstore 对您来说不够快,您可以将 marshal 返回的字符串切成 1M 大小的块,然后使用某种系统的键集将它们写入内存缓存。只要每个值小于 1M,您就可以使用 put_multi()/get_multi() 向/从内存缓存写入/读取 32M 的数据。 (2认同)