Question

J'ai écrit quelques unittes avec une étagère à http://code.google.com/p/filecache/ Et Python 2 enregistre exactement le nom de fichier que je spécifie dans shelve.open () mais dans Python 3, j'obtiens 3 fichiers différents "bak", "dat" et "dir". Donc, avant le début des tests, je veux effacer ces fichiers, mais je ne sais pas si j'ai une garantie quant à leur nom de fichier ou à leur extension.

Comment puis-je effacer une étagère si je sais que c'est un nom?

Était-ce utile?

La solution

Les extensions que vous obtenez dépend de quel backend de base de données est utilisé. Il est possible que la valeur par défaut diffère entre Python 2 et Python 3, mais cela peut également faire une différence entre les interfaces de base de données disponibles dans votre environnement.

Donc non, vous n'avez pas de garantie aux extensions, sauf si vous utilisez une implémentation spécifique, c'est-à-dire BSDDBShelf ou DBFileNameShelf. Vous pouvez probablement spécifier un fichier dans un répertoire temporaire créé par TempFile, puis supprimer le répertoire WHOR.

Autres conseils

J'utilise une étagère parce que les objets temporaires et dictés [] ne peuvent pas persister sur les modules. Comme vous l'avez découvert, appeler .clear () n'effacer pas le contenu de l'objet persistant sur le disque, laissant un fichier r + w peuplé sur le disque Après la sortie. (Similaire à une vulnérabilité d'usage après sans), vous pouvez supprimer l'assemblage une fois terminé en utilisant:

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top