Как вы удаляете 3 полки в Python 3?
Я написал несколько юнит-тестов с полкой на http://code.google.com/p/filecache/ и Python 2 сохраняет именно то имя файла, которое я указал в shelve.open(), но в Python 3 я получаю 3 разных файла "bak", "DAT" и "DIR". Поэтому перед началом тестирования я хочу стереть эти файлы, но не знаю, есть ли у меня какие-либо гарантии относительно их имени или расширения.
Как я могу стереть полку, если я знаю ее название?
2 ответа
Какие расширения вы получите, зависит от того, какая база данных используется. Возможно, что значения по умолчанию отличаются между Python 2 и Python 3, но это также может быть разница между тем, какие интерфейсы базы данных доступны в вашей среде.
Так что нет, у вас нет гарантии на расширения, если вы не используете конкретную реализацию, то есть BsdDbShelf или DbfilenameShelf. Возможно, вы могли бы указать файл во временном каталоге, созданном tempfile, а затем удалить каталог while.
Я использую shelve, потому что объекты tempFile и dict[] не могут сохраняться в разных модулях. Как вы обнаружили, вызов.clear() не удаляет содержимое из постоянного объекта на диске, оставляя заполненный файл r+w на диске после выхода. (По аналогии с уязвимостью "использование после освобождения") Вы можете удалить полку, когда закончите, используя:
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)