<!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> </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> </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> </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>
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> </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>
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> </DIV>
<DIV><FONT face=Verdana size=2><SPAN class=051083608-27072007>So why, when I run
this, 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 shelve uses database backends, 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> </DIV>
<DIV><FONT face=Verdana size=2></FONT> </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> </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>