Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打印词典并将其保存到文件中,然后将其复制到py文件中以供使用?_Python_Google App Engine_Python 2.7_Webapp2 - Fatal编程技术网

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

Python 打印词典并将其保存到文件中,然后将其复制到py文件中以供使用?,python,google-app-engine,python-2.7,webapp2,Python,Google App Engine,Python 2.7,Webapp2,使用DB,我想创建一个非常大的字典。如果我将其保存到磁盘,当进行pickle时,它将占用大约10MB的空间 我想做的是: 将此词典原样保存到磁盘,以便打开该文本文档并将其复制到另一个py文件,这样我就不必每次都重新生成它,并且每当通过web app调用py文档时,它都是可编辑的 我该怎么做 另外,我的应用程序在谷歌应用程序引擎上运行,我想这样解决这个问题,避免使用DB等资源 首先,如果您的字典pickle占用10MB的空间,那么它可能会比您将其存储在py文件中时占用更多的空间。如果你的字典只包含

使用DB,我想创建一个非常大的字典。如果我将其保存到磁盘,当进行pickle时,它将占用大约10MB的空间

我想做的是:

将此词典原样保存到磁盘,以便打开该文本文档并将其复制到另一个py文件,这样我就不必每次都重新生成它,并且每当通过web app调用py文档时,它都是可编辑的

我该怎么做


另外,我的应用程序在谷歌应用程序引擎上运行,我想这样解决这个问题,避免使用DB等资源

首先,如果您的字典pickle占用10MB的空间,那么它可能会比您将其存储在py文件中时占用更多的空间。如果你的字典只包含基本类型,你可以只使用普通印刷品

>>> print 'mydict = %s' %({'a': [1,2], 2: 'c'}, )
mydict = {'a': [1, 2], 2: 'c'}
还要考虑到此类文件的加载时间将相当长

其次,使用Google App Engine不可能实现您想要的操作,因为您无法动态更改项目的源。除非那本字典永远不会改变


Google app engine甚至对数据存储也有免费配额,所以我看不出试图绕过它有什么意义。

首先,如果你的字典pickle占用了10MB的空间,它可能会比你将它存储在一个py文件中占用更多的空间。如果你的字典只包含基本类型,你可以只使用普通印刷品

>>> print 'mydict = %s' %({'a': [1,2], 2: 'c'}, )
mydict = {'a': [1, 2], 2: 'c'}
还要考虑到此类文件的加载时间将相当长

其次,使用Google App Engine不可能实现您想要的操作,因为您无法动态更改项目的源。除非那本字典永远不会改变


Google app engine甚至对数据存储也有免费配额,所以我不认为试图绕过它有什么意义。

GAE上文件的最大可接受大小为10485760字节

而且,这么大的字典听起来效率不高。运行应用程序所需的实例小时数可能会丢失在数据存储调用中保存的内容


最后,从成本和性能的角度来看,您最好只使用数据存储

GAE上文件的最大可接受大小为10485760字节

而且,这么大的字典听起来效率不高。运行应用程序所需的实例小时数可能会丢失在数据存储调用中保存的内容


最后,从成本和性能的角度来看,您最好只使用数据存储

无法在应用程序引擎中保存到磁盘。最接近的等效方法是酸洗并保存到blobstore


您必须自己进行测试,看看性能是否值得,但Blobstore可能比反复发出查询来重新生成此数据要便宜。

您无法在App Engine中保存到磁盘。最接近的等效方法是酸洗并保存到blobstore


您必须自己进行测试,看看性能是否值得,但是Blobstore可能比反复发出查询来重新生成此数据要便宜。

老实说,我不明白您为什么要尝试这样做,因此无法想出可能有用的主意

你能说明你想做什么而不是你想做什么吗


虽然如果我理解正确的话,你想做的是避开资源使用。如果您使用该平台,则无法避免使用GAE资源。无论你做什么,你都会在AppEngine上找到某种类型的资源使用情况。您可以将字典放在数据存储、blobstore或memcache中。您可以将数据发送到另一个url,也可以下载和上载数据,但您仍在使用资源。

老实说,我不明白您为什么要尝试这样做,因此无法想出一个可能有用的主意

你能说明你想做什么而不是你想做什么吗


虽然如果我理解正确的话,你想做的是避开资源使用。如果您使用该平台,则无法避免使用GAE资源。无论你做什么,你都会在AppEngine上找到某种类型的资源使用情况。您可以将字典放在数据存储、blobstore或memcache中。您可以将数据发送到另一个url,也可以下载和上载数据,但您仍在使用资源。

通过文件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()
请注意:

您不能修改blob,因此要修改它,您需要阅读dict 在内存中,删除blob,创建一个新blob并替换上的键 模型。 字典越大,你就越有可能找到它 软进程大小限制。 我用元帅但你可以用泡菜, json或任何你喜欢的东西。 无法从GAE SDK写入文件:

通过文件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()
请注意:

您不能修改blob,因此要修改它,您需要阅读dict 在内存中,删除blob, 创建一个新的并替换上的键 模型。 字典越大,你就越有可能找到它 软进程大小限制。 我用元帅但你可以用泡菜, json或任何你喜欢的东西。 无法从GAE SDK写入文件:

听起来您只是想要一个可以作为python加载的字典转储。这相当容易:

>>> d = {'key': 'value'}
>>> print '%r' % (d, )
{'key': 'value'}
>>> print repr(d)
{'key': 'value'}
>>> open('/tmp/mydict.py', 'w').write(repr(d))

听起来您只是想要一个可以作为python加载的字典转储。这相当容易:

>>> d = {'key': 'value'}
>>> print '%r' % (d, )
{'key': 'value'}
>>> print repr(d)
{'key': 'value'}
>>> open('/tmp/mydict.py', 'w').write(repr(d))

该限制适用于应用程序文件。如果他试图生成一个文件,他可以在BlobStore中存储一个更大的文件,或者我可以将其分成两个py文件。但那不是我关心的。我担心的是,我无法理解如何在我自己的开发计算机上将字典打印成unicode文本文档。谢谢。这是申请文件的限制。如果他试图生成一个文件,他可以在BlobStore中存储一个更大的文件,或者我可以将其分成两个py文件。但那不是我关心的。我担心的是,我无法理解如何在我自己的开发计算机上将字典打印成unicode文本文档。谢谢,你好。我正在我的开发机器上从数据库创建一个非常大的TRIE。我想把它作为字典存储在内存中,这样我就有时间了。创建这棵树需要DB花费一点时间,所以我希望它位于py文件中,这样每当调用该文件时,它都会在内存中等待使用。我想在我的开发计算机上实现这一点,然后将py上传到服务器上。我知道如何打印dict,但如何创建一个utf-8纯文本文档?此解决方案的问题是无法保证您的实例始终处于运行状态,因此每当GAE创建一个新实例时,都需要相当长的时间来加载。您的用例是什么,如果您正在使用trytes,我想您希望执行某种搜索,在这种情况下,全文搜索api可能会很有用。要创建文件,可以使用fd=open'mytrie.py','w'fd.write'mytrie=%s'%mytrie,fd.close。然后只需从mytrie导入您的代码,mytrie将选中全文搜索选项作为本用例中的解决方案。也非常感谢你解释我在找什么。非常感谢,再次感谢。你好。我正在我的开发机器上从数据库创建一个非常大的TRIE。我想把它作为字典存储在内存中,这样我就有时间了。创建这棵树需要DB花费一点时间,所以我希望它位于py文件中,这样每当调用该文件时,它都会在内存中等待使用。我想在我的开发计算机上实现这一点,然后将py上传到服务器上。我知道如何打印dict,但如何创建一个utf-8纯文本文档?此解决方案的问题是无法保证您的实例始终处于运行状态,因此每当GAE创建一个新实例时,都需要相当长的时间来加载。您的用例是什么,如果您正在使用trytes,我想您希望执行某种搜索,在这种情况下,全文搜索api可能会很有用。要创建文件,可以使用fd=open'mytrie.py','w'fd.write'mytrie=%s'%mytrie,fd.close。然后只需从mytrie导入您的代码,mytrie将选中全文搜索选项作为本用例中的解决方案。也非常感谢你解释我在找什么。非常感谢你,再次感谢你。我想在我的开发机器上做这件事,然后作为一个py文件上传到服务器上。我怎样才能把这个大字写进一个纯文本utf8文件?这就是我真正想知道的。谢谢。我想在我的开发机器上做这件事,只作为一个py文件上传到服务器上。我怎样才能把这个大字写进一个纯文本utf8文件?这就是我真正想知道的。谢谢。我有一个类似单词列表的DB表。我经常在上面执行复杂的查找算法。SQL速度慢,占用大量内存。我的解决方案是:将其转换为TRIE,将其存储在字典的自定义哈希表中并使用它。创建它意味着要通过DB,而且它太长了。我希望在每次查找时都避免这种情况。我希望TRIE存储在内存中,只创建一次并多次访问。由于这是一个web应用程序,10个人可能会提出10个使用它的请求。而且它需要超过1MB的内存,更像是10个。但是,我可以在memcache的情况下分发它。为什么不在生产环境中计算该文件呢?您可以使用不符合1分钟请求限制的to do calc。然后你可以使用memcache来提高应用程序的效率。我能想到的另一件事是使用JSON将数据上传到服务器,您仍然需要将其转储到blobstore和memcache中。JSONPickle是我在帖子中看到的东西,我没有使用过它。这里是一个post-JSON vs-Pickle,我有一个类似于单词列表的DB表。我经常在上面执行复杂的查找算法。SQL速度慢,占用大量内存。我的解决方案是:将其转换为TRIE,将其存储在字典的自定义哈希表中并使用它。创造它
正在通过DB,它太长了。我希望在每次查找时都避免这种情况。我希望TRIE存储在内存中,只创建一次并多次访问。由于这是一个web应用程序,10个人可能会提出10个使用它的请求。而且它需要超过1MB的内存,更像是10个。但是,我可以在memcache的情况下分发它。为什么不在生产环境中计算该文件呢?您可以使用不符合1分钟请求限制的to do calc。然后你可以使用memcache来提高应用程序的效率。我能想到的另一件事是使用JSON将数据上传到服务器,您仍然需要将其转储到blobstore和memcache中。JSONPickle是我在帖子中看到的东西,我没有使用过它。下面是一个关于marshal的post-JSON vs-Pickle的好调用,它是三个调用中最快、最紧凑的。如果blobstore对您来说不够快,您可以将封送处理返回的字符串切碎为1M大小的块,并使用某种系统化的密钥集将其写入memcache。只要每个值不超过1M,就可以使用put_multi/get_multi将32M的数据写入/读取到memcache。marshal是三个值中最快、最紧凑的。如果blobstore对您来说不够快,您可以将封送处理返回的字符串切碎为1M大小的块,并使用某种系统化的密钥集将其写入memcache。只要每个值小于1M,就可以使用put_multi/get_multi向memcache写入/读取32M数据。