标签: shelve

如何删除python 3中的3个搁置文件?

我在http://code.google.com/p/filecache/写了一些搁置的单元测试,python 2保存了shelve.open()中我指定的文件名,但在python 3中我得到了3个不同的文件"bak", "dat"和"dir".所以在测试开始之前我想删除这些文件,但我不知道我是否对它们的文件名或扩展名有任何保证.

如果我知道它的名字,我怎么能擦掉货架呢?

python shelve python-3.x

5
推荐指数
1
解决办法
1280
查看次数

如何使用shelve实现Python虚拟文件系统

我已经设置了一个模拟操作系统的Python脚本.它有一个命令提示符和一个虚拟文件系统.我正在使用shelve模块来模拟文件系统,它是多维的,以支持目录层次结构.但是,我无法实现'cd'命令.我不知道如何进出目录,即使我在第一次启动程序时创建了一小组目录.这是我的代码:

import shelve

fs = shelve.open('filesystem.fs')
directory = 'root'
raw_dir = None
est_dir = None

def install(fs):
    fs['System'] = {}
    fs['Users'] = {}
    username = raw_input('What do you want your username to be? ')
    fs['Users'][username] = {}

try:
    test = fs['runbefore']
    del test
except:
    fs['runbefore'] = None
    install(fs)

def ls(args):
    print 'Contents of directory', directory + ':'
    if raw_dir:
        for i in fs[raw_dir[0]][raw_dir[1]][raw_dir[2]][raw_dir[3]]:
            print i
    else:
        for i in fs:
            print i

def cd(args):
    if len(args.split()) > 1:
        if args.split()[1] …
Run Code Online (Sandbox Code Playgroud)

python filesystems shelve

5
推荐指数
1
解决办法
5025
查看次数

看到TFS2010搁置的变化

我正在使用TFS 2010.我必须检查在签入之前被其他开发人员搁置的代码.我们如何才能在TFS2010中执行此操作,以便我可以进行更改和审核.谢谢!

tfs shelve

5
推荐指数
1
解决办法
3055
查看次数

如何强制python使用dumbdbm模块创建新数据库?

shelve模块在anydbm模块顶部实现.此模块充当4种不同特定DBM实现的外观,它将按以下顺序选择创建新数据库时可用的第一个模块:

  • dbhash (已弃用但仍是anydbm首选).这是bsddb模块的代理,.open()真的bsddb.hashopen()

  • gdbm,GNU DBM库的Python模块,提供的功能比dbm模块在与同一个库一起使用时提供的功能更多.

  • dbm,一个使用ndbmBSD DB和GNU DBM库的代理模块(在编译Python时选择).

  • dumbdbm,一个纯python实现.

但是在我的系统中,虽然我dbhash出于某种原因我希望它只是用它来创建数据库dumbdbm.

我怎样才能做到这一点?

python database unix shelve

5
推荐指数
1
解决办法
793
查看次数

搁置对只读多处理不安全吗?

shelve模块的文档根据限制做出以下声明:

搁置模块不支持对搁置对象的并发读/写访问。(多个同时读取访问是安全的。)

据我所知,这意味着只要我不尝试让多个进程一次写入单个架子,我就应该清楚。使用同一个架子作为只读缓存的多个进程应该是安全的。对?

显然不是。经过一番挣扎,我最终得到了一个测试用例,该用例在从架子上异步读取时似乎表现出一些非常糟糕的行为。以下脚本:

  1. 创建 aShelf并用"i" : 2*ifori从 1 到 10填充它。
  2. 读回所有这些值,以确保它们被正确存储。
  3. 生成进程以从架子文件中检索每个键的值,并报告是否检索到值。

    import multiprocessing
    import shelve
    
    SHELF_FILE = 'test.shlf'
    
    def store(key, obj):
        db = shelve.open(SHELF_FILE, 'w')
        db[key] = obj
        db.close()
    
    def load(key):
        try:
            db = shelve.open(SHELF_FILE, 'r')
            n = db.get(key)
            if n is not None:
                print('Got result {} for key {}'.format(n, key))
            else:
                print('NO RESULT for key {}'.format(key))
        except Exception as e:
            print('ERROR on key {}: {}'.format(key, e)) …
    Run Code Online (Sandbox Code Playgroud)

python persistence shelve multiprocessing

5
推荐指数
1
解决办法
1612
查看次数

对于2Gb文本文件,搁架字典大小> 100Gb

我正在从基因组FASTA文件创建序列的搁置文件:

# Import necessary libraries
import shelve
from Bio import SeqIO

# Create dictionary of genomic sequences
genome = {}
with open("Mus_musculus.GRCm38.dna.primary_assembly.fa") as handle:
    for record in SeqIO.parse(handle, "fasta"):
        genome[str(record.id)] = str(record.seq)

# Shelve genome sequences
myShelve = shelve.open("Mus_musculus.GRCm38.dna.primary_assembly.db")
myShelve.update(genome)
myShelve.close()
Run Code Online (Sandbox Code Playgroud)

该文件本身是2.6Gb,但是当我试图搁置它时,正在生成一个> 100Gb的文件,而且我的计算机将抛出一些关于内存不足和启动磁盘已满的投诉.这似乎只发生在我尝试在OSX Yosemite下运行时,在Ubuntu上它按预期工作.有什么建议为什么这不起作用?我正在使用Python 3.4.2

python bioinformatics shelve out-of-memory

5
推荐指数
1
解决办法
444
查看次数

在几次pickle/unpickle迭代之后,shelve引发了EOFError

我正在使用搁置模块来保存一些数据.我的shelve对象的键值是设置对象.

酸洗片段:

import shelve

other_links = {
'Blue Estate The Game, 72': 'https://store.steampowered.com/account/ackgift/A5e5AB6C5050A331B?redeemer=esmcfofp%40skinsgifts.com', 
'Hope Lake, 75': 'https://store.steampowered.com/account/ackgift/70E2E6Ce9F1733265?redeemer=esmcfofp%40skinsgifts.com', 
'Forget Me Not: My Organic Garden, 74': 'https://store.steampowered.com/account/ackwift/A14373949D126B37?redeemer=esmcfofp%40skinsgifts.com', 
'Until I Have You, 74': 'https://store.steampowered.com/account/ackgift/69030w5ECB8D0F07F?redeemer=esmcfofp%40skinsgifts.com', 
'Lex Mortis, 74': 'https://store.steampowered.com/account/ackgift/2760w1D8B48EB3601?redeemer=esmcfofp%40skinsgifts.com', 
'I am Bread, 72': 'https://store.steampowered.com/account/ackgift/1CEC5e2D2BEF20C41?redeemer=esmcfofp%40skinsgifts.com', 
'Lumini, 72': 'https://store.steampowered.com/account/ackgift/472F108Aw0609C215?redeemer=esmcfofp%40skinsgifts.com'
}
links = shelve.open('links', writeback = True)
for key, value in other_links.items():
    db_value = links.get(key)
    if not db_value:
        db_value = set()
    db_value.add(value)
    links[key] = db_value
links.close()
Run Code Online (Sandbox Code Playgroud)

在几次转储之后,引发了EOFError异常:

Exception in thread Thread-3:
Traceback (most recent call last):
  File …
Run Code Online (Sandbox Code Playgroud)

python shelve pickle

5
推荐指数
1
解决办法
247
查看次数

Python搁置有未列出的项目

我一直在使用Python的shelve模块(在OSX 10.9.5上使用Python 3.4)将一堆字典保存到文件中.每个key都是一个int(例如,"84554")的字符串,每个都是一些字符串的value字典.

没有键被使用两次,我知道所有可能键的总超集.我将这些键值对添加到shelfvia线程中,每次运行时都会添加哪些键/值(这是预期的).

我遇到的问题是使用shelve's 可迭代/可见的键shelf.keys()数以及唯一键的数量key in shelf.keys() 不同.

这是我的代码.我首先初始化和加载ids,这是所有可能的键的列表.

import shelve 
from custom_code import *
MAIN_PATH = "/Users/myname/project_path/src/"
ids = list(set(load_list(MAIN_PATH + "id_list.pkl")))
c = c2 = 0
good_keys = []
bad_keys = []
Run Code Online (Sandbox Code Playgroud)

然后我打开架子,计算我迭代的所有键数db.keys(),将"好"键添加到列表中.

db = shelve.open(MAIN_PATH + "first_3")
for k in db.keys():
    c2+=1
    good_keys+=[k]
Run Code Online (Sandbox Code Playgroud)

然后,我检查每个可能的钥匙,看它是否在架子上,检查架子上是否存在,并做同样的事情.

for j in set(ids):
    if j in db.keys():
        c+=1
        bad_keys+=[j]
Run Code Online (Sandbox Code Playgroud)

两个计数器,c并且 …

python dictionary shelve dbm python-3.x

5
推荐指数
1
解决办法
102
查看次数

Python `shelve` 只读模式不起作用

shelve只读模式坏了吗?文档说该flag参数的工作原理如中所述,dbm.open所以我认为如果我以读取模式打开,我不应该能够更改搁置对象。

\n\n

这里的页面似乎还建议修改以只读方式打开的搁置对象应该引发异常。但我仍然可以执行以下操作:

\n\n
Python 3.7.2 (default, Dec 29 2018, 06:19:36) \n[GCC 7.3.0] :: Anaconda, Inc. on linux\nType "help", "copyright", "credits" or "license" for more information.\n>>> import shelve\n>>> with shelve.open(\'testdata\') as shelf:\n...      shelf[\'two\'] = 2222\n...      shelf[\'one\'] = 1111\n... \n
Run Code Online (Sandbox Code Playgroud)\n\n

接下来我将用 和 打开它flag=\'r\',只是writeback=False为了确定一下。但我可以修改对象。

\n\n
>>> with shelve.open(\'testdata\', flag=\'r\', writeback=False) as shelf:\n...     for k, v in shelf.items():\n...             print(\'Key: \', k, \' Value: \', v)\n...     shelf[\'two\'] = 1111\n...     shelf[\'one\'] = 2222\n... \nKey: …
Run Code Online (Sandbox Code Playgroud)

python shelve python-3.7

5
推荐指数
1
解决办法
1538
查看次数

“shelve”只是“dbm”和“pickle”的组合吗?

那么 中 所做的一切都可以用和shelve单独完成吗?dbmpickle

python shelve dbm pickle python-3.x

5
推荐指数
1
解决办法
952
查看次数