Pergunta

Eu escrevi alguns unittests com shelve em http://code.google.com/p/filecache/ e python 2 salva exatamente o nome de arquivo que especifico em shelve.open() mas em python 3 recebo 3 arquivos diferentes "bak", "dat" e "dir".Portanto, antes de começar os testes, quero apagar esses arquivos, mas não sei se tenho alguma garantia quanto ao nome ou extensão do arquivo.

Como posso apagar uma estante se sei o nome dela?

Foi útil?

Solução

Quais extensões você recebe depende de qual backend do banco de dados é usado.É possível que o padrão seja diferente entre o Python 2 e o Python 3, mas também pode ser uma diferença entre quais interfaces de banco de dados estão disponíveis em seu ambiente.

Então não, você não tem uma garantia para as extensões, a menos que você use uma implementação específica, ou seja, seja BSDDBshelf ou DBFilenAmeshelf.Você provavelmente poderia especificar um arquivo em um diretório temporário criado por Tempfile e excluir o diretório enquanto.

Outras dicas

Eu uso shelve porque os objetos tempFile e dict[] não podem persistir entre os módulos.Como você descobriu, chamar .clear() não limpa o conteúdo do objeto persistente no disco, deixando um arquivo r+w preenchido no disco após a saída.(Semelhante a uma vulnerabilidade use-after-free) Você pode excluir o shelve quando terminar de usar:

import os
import shelve

shelve_name = 'shelve_name'
shelve_contents = shelve.open(shelve_name, flag='c', protocol=None, writeback=False)

shelve_file = (os.path.join(os.getcwd(), shelve_name))
os.remove(shelve_file)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top