Como você apaga os 3 arquivos arquivados em python 3?
-
12-11-2019 - |
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?
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)