我在http://code.google.com/p/filecache/上寫了幾個unittests,python 2保存了我在shelve.open()中指定的文件名,但是在python 3中我得到了3個不同的文件「bak」,「dat」和「dir」。所以在測試開始之前,我想刪除這些文件,但我不知道我的文件名或擴展名是否有任何保證。如何擦除python 3中的3個擱置文件?
如果我知道它的名字,我該如何抹掉貨架?
我在http://code.google.com/p/filecache/上寫了幾個unittests,python 2保存了我在shelve.open()中指定的文件名,但是在python 3中我得到了3個不同的文件「bak」,「dat」和「dir」。所以在測試開始之前,我想刪除這些文件,但我不知道我的文件名或擴展名是否有任何保證。如何擦除python 3中的3個擱置文件?
如果我知道它的名字,我該如何抹掉貨架?
你得到的擴展取決於使用哪個數據庫後端。 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.getcwd()+'/'+shelve_name)
os.remove(shelve_file)
那種我可以編程方式創建一個架子,雖然我無法抹去一個(而不承擔太多)。 – ubershmekel 2011-02-11 11:42:11