我正在使用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) 我有一个程序,它需要一个非常庞大的输入文件,并从中产生一个字典.由于这不适合内存,我决定使用shelve将其写入我的磁盘.现在我需要利用我的系统中的多个核心(其中8个),这样我就可以加快解析速度.我认为最明显的方法是将输入文件分成8个部分,同时在所有8个部分上运行代码.问题是我最后只需要一本字典.不是8个.那么如何使用shelve并行更新单个字典呢?
我想知道是否可以使用git与以下工作流程:
本地克隆远程存储库
进行本地更改
在本地提交它们
远程保存它们,以免发生变化,以防我想继续在另一个工作站上工作
继续这样,直到功能完成
然后我想最终提交它,就像它是一次提交一样......
我在谈论搁置,但将部分提交保存到原始存储库
有可能(或推荐)使用git这样工作吗???
我有一些我不想提交的更改文件(例如web.config).在我提取并更新到新的变更集之前,我必须搁置它们.拉动和更新后,我不得不取消他们.
我目前正在使用TortoiseHG.有没有可以自动执行此操作的扩展程序?
我正在尝试编写一个程序,该程序使用按字母顺序排列的货架数据库作为键,以及可以从中创建的单词列表作为值。例如:
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个字长,不应太大
使用多个模块编写基于Web的flask api应用程序.我想为不同的模块的不同用户登录包含不同的权限和特权.查询是否应将这些权限存储为会话词典或搁置值?哪个更有效,更快?在这种情况下,为什么会有一个优先于另一个?
如何序列化哈希对象?我正在使用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) 这是我第一次在堆栈溢出中发帖。也许我可以得到我需要的解决方案。
busdata=shelve.open("Database")
for lctno in busdata.keys():
outputLine( lctno , busdata[ lctno ])
Run Code Online (Sandbox Code Playgroud)
它随机显示我的 .dat 文件中的数据。我希望它按升序显示。
当我删除架子中的元素时,我还剩下一些数据。我尝试过pop,del但clear结果是一样的。剩余的数据位于扩展名为 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)
有没有办法彻底删除货架上的数据?