标签: shelve

向现有类添加函数的最简单方法

我正在使用python的内置搁置模块来管理一些简单的字典.我遇到的问题是我想使用with shelve.open(filename) as f:,但是当我尝试它时声称DbfilenameShelf没有属性__exit__.

所以,我猜测最简单的方法是将它包装在另一个类中__exit__并向该包装器添加一个函数.我试过这个:

class Wrapper(shelve.DbfilenameShelf):
    def __exit__(self):
        self.close()
    def __init__(self, filename, writeback=False):
        shelve.DbfilenameShelf.__init__(self, filename, flag='c', protocol=None, writeback=False)
Run Code Online (Sandbox Code Playgroud)

但是当我试图像这样实例化包装器时:wrapped = Wrapper(filename)它告诉我我给它一个无效的参数.

请求错误:

Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<input>", line 5, in __init__
File "C:\Python27\Lib\shelve.py", line 223, in __init__
Shelf.__init__(self, anydbm.open(filename, flag), protocol, writeback)
File "C:\Python27\Lib\anydbm.py", line 85, in open
return mod.open(file, flag, mode)
File "C:\Python27\Lib\dbhash.py", line 18, in open
return bsddb.hashopen(file, flag, mode)
File …
Run Code Online (Sandbox Code Playgroud)

python shelve wrapper

4
推荐指数
1
解决办法
1275
查看次数

在python中并行更新搁置字典

我有一个程序,它需要一个非常庞大的输入文件,并从中产生一个字典.由于这不适合内存,我决定使用shelve将其写入我的磁盘.现在我需要利用我的系统中的多个核心(其中8个),这样我就可以加快解析速度.我认为最明显的方法是将输入文件分成8个部分,同时在所有8个部分上运行代码.问题是我最后只需要一本字典.不是8个.那么如何使用shelve并行更新单个字典呢?

python parallel-processing shelve multiprocessing

4
推荐指数
2
解决办法
3461
查看次数

git搁置到远程存储库

我想知道是否可以使用git与以下工作流程:

  • 本地克隆远程存储库

  • 进行本地更改

  • 在本地提交它们

  • 远程保存它们,以免发生变化,以防我想继续在另一个工作站上工作

继续这样,直到功能完成

然后我想最终提交它,就像它是一次提交一样......

我在谈论搁置,但将部分提交保存到原始存储库

有可能(或推荐)使用git这样工作吗???

git commit shelve

3
推荐指数
1
解决办法
1155
查看次数

在使用Mercurial(使用TortoiseHG)之前自动搁置?

我有一些我不想提交的更改文件(例如web.config).在我提取并更新到新的变更集之前,我必须搁置它们.拉动和更新后,我不得不取消他们.

我目前正在使用TortoiseHG.有没有可以自动执行此操作的扩展程序?

mercurial pull shelve tortoisehg

3
推荐指数
1
解决办法
740
查看次数

有没有办法在hg unshelve -i输出中手动应用差异?

hg shelve再做一次 - 即使应用hg中描述的补丁没有工作(它工作愉快了大约一个月),搁置只是"丢失"我的所有更改.

我在跑步时看到了我的搁架的名字hg shelve -l,但是当我这样做时,hg unshelve -n <name>我得到了可怕的" nothing to unshelve"消息.

我可以看到所有的变化hg unshelve -i -n <name>.什么是最简单的方法让他们回到我的本地存储库,因为这个不合理的命令拒绝承认他们在那里,即使它会愉快地向我展示它们?

mercurial shelve unshelve

3
推荐指数
1
解决办法
518
查看次数

搁置是否真的很慢并且占用大量内存,或者我做错了什么?

我正在尝试编写一个程序,该程序使用按字母顺序排列的货架数据库作为键,以及可以从中创建的单词列表作为值。例如:

db['mnoo'] = ['moon', 'mono']
Run Code Online (Sandbox Code Playgroud)

因此,我编写了一个函数,该函数接受文件名并将其加载到文件架中。第一部分,将文件转换为具有与货架相同布局的字典,但货架部分需要很长时间。

我正在尝试使用〜100k条目的字典,每个值都是一个列表。每1000个输入项似乎要花费15-20秒,每个输入项似乎要占用约1kb的空间。这是无情的吗?
代码:

def save_to_db(filename, shelve_in='anagram_db'):
    dct = anagrams_from_list(process_file(filename))

    with shelve.open(shelve_in, 'c') as db:
        for key, wordlist in dct.items():
            if not key in db:
                db[key] = wordlist
            else:
                db[key].extend(wordlist)
Run Code Online (Sandbox Code Playgroud)

编辑:只是快速的澄清:字典中的每个列表大约是1-3个字长,不应太大

python shelve

3
推荐指数
1
解决办法
598
查看次数

我们应该在python shelve中存储会话权限还是会话变量?

使用多个模块编写基于Web的flask api应用程序.我想为不同的模块的不同用户登录包含不同的权限和特权.查询是否应将这些权限存储为会话词典或搁置值?哪个更有效,更快?在这种情况下,为什么会有一个优先于另一个?

python session shelve flask

3
推荐指数
1
解决办法
169
查看次数

如何在Python中序列化哈希对象

如何序列化哈希对象?我正在使用shelve来存储大量对象。

等级制度:

- user
    - client
    - friend
Run Code Online (Sandbox Code Playgroud)

用户.py:

import time
import hashlib
from localfile import localfile

class user(object):
    _id = 0
    _ip = "127.0.0.1"
    _nick = "Unnamed"
    _files = {}
    def __init__(self, ip="127.0.0.1", nick="Unnamed"):
        self._id = hashlib.sha1(str(time.time()))
        self._ip = ip
        self._nick = nick
    def add_file(self, localfile):
        self._files[localfile.hash] = localfile
    def delete_file(self, localfile):
        del self._files[localfile.hash]

if __name__ == "__main__":
    pass
Run Code Online (Sandbox Code Playgroud)

客户端.py:

from user import user
from friend import friend

class client(user):
    _friends = []
    def __init__(self, ip="127.0.0.1", nick="Unnamed"): …
Run Code Online (Sandbox Code Playgroud)

python hash serialization shelve

2
推荐指数
1
解决办法
3673
查看次数

如何按顺序显示搁置中的所有数据?

这是我第一次在堆栈溢出中发帖。也许我可以得到我需要的解决方案。

busdata=shelve.open("Database")
for lctno in busdata.keys():
    outputLine( lctno , busdata[ lctno ])
Run Code Online (Sandbox Code Playgroud)

它随机显示我的 .dat 文件中的数据。我希望它按升序显示。

python shelve

2
推荐指数
1
解决办法
4448
查看次数

删除搁架中数据的最干净方法是什么?

当我删除架子中的元素时,我还剩下一些数据。我尝试过popdelclear结果是一样的。剩余的数据位于扩展名为 dat 的文件中。因此,即使使用该方法清除后,dat 文件的大小也不是 0Ko。

这就是我尝试过的:

import shelve
test = shelve.open('test')
test['a']=1
#test.pop('a')
#del test['a']
#test.clear()
test.close()
Run Code Online (Sandbox Code Playgroud)

有没有办法彻底删除货架上的数据?

python shelve

2
推荐指数
1
解决办法
4817
查看次数