<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.5730.11" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007>Hi,</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007>I've hit a snag 
with Python's shelve module. By way of example...</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007>_____</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007>from shelve import 
DbfilenameShelf as StoreFile</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007>import 
os</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007>sf=StoreFile("mytest.db",writeback=False) # but same 
problem if writeback=True</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007>for i in 
range(10000):</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007>&nbsp;&nbsp;&nbsp; 
sf[str(i)]="TESTOBJECT"</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007>sf.sync()</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007>print 
len(sf)</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007>sf.close()</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007>predeletesize=os.path.getsize("mytest.db")</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007>print <SPAN 
class=051083608-27072007>predeletesize</SPAN></SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007>sf=StoreFile("mytest.db",writeback=False) # but same 
problem if writeback=True</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007>for i in 
range(5000):</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007>&nbsp;&nbsp;&nbsp; 
del sf[str(i)]</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007>sf.sync()</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007><SPAN 
class=051083608-27072007>print len(sf)</SPAN></SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007>sf.close()</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007>postdeletesize=</SPAN></FONT><FONT face=Verdana 
size=2><SPAN class=051083608-27072007><FONT face=Verdana size=2><SPAN 
class=051083608-27072007>os.path.getsize("mytest.db")</SPAN></FONT></SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007><FONT face=Verdana 
size=2><SPAN class=051083608-27072007>print <SPAN 
class=051083608-27072007>postdeletesize</SPAN></SPAN></FONT></DIV></SPAN></FONT></SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007>_____</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007>So why, when I run 
this,&nbsp;does predeletesize!=postdeletesize?</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007>I gather that with 
most database types you have to invoke a special command like VACUUM to perform 
cleanups after table deletions etc</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007>so, 
since&nbsp;shelve uses database backends,&nbsp;is this related to that? Is there 
a way to tell (e.g.) a DBfilenameShelf to do this? Or am I stuck with having to 
delete the entire file and save it again?</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2><SPAN 
class=051083608-27072007></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Verdana size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007>Running PythonWin 
2.5.1 on XP.</SPAN></FONT></DIV>
<DIV><FONT face=Verdana size=2></FONT>&nbsp;</DIV>
<DIV><SPAN class=051083608-27072007><FONT face=Verdana 
size=2>thanks</FONT></SPAN></DIV>
<DIV align=left><FONT face=Verdana size=2>Dave</FONT></DIV></BODY><br/>
<p>
This message has been checked for viruses but the contents of an attachment
may still contain software viruses, which could damage your computer system:
you are advised to perform your own checks. Email communications with the
University of Nottingham may be monitored as permitted by UK legislation.
</p>
</HTML>