Gabriel Genellina
1/27/2008 5:45:00 PM
En Sat, 26 Jan 2008 05:21:52 -0200, nodrogbrown <nodrogbrown@gmail.com>
escribi�:
> hi
> i am writing code to check a folder containing images and then process
> thir vals using PIL and do some calc to create a matrix of values .if
> the folder has any new imgs added the program will do all calc again
> and dump the values into a cachefile.If the folder contents remain
> unaltered the program should not do calc but load the vals from
> cachefile..it is assumed that malicious alterations are not made on
> the folder and so i wont be doing any thorogh check but just checking
> if contents of folder have changed..i do something like this
>
>
> def checkCache(self):
> filenameslist=getfilenameslist() # made by parsing folder before
> this
> try:
> f=open(cachefile)
>
> except IOError:
> #no cache found ,do all calc
> mynumpymatrix1,imgwdth,imght=docalculations()
> f2=open(cachefile,"w")
> #dump values as tuple
> pickle.dump((filenameslist,imgwdth,imght,mynumpymatrix1),f2)
> f2.close()
> else:
> #cache exists, need to check if folder contents changed
> oldfilenameslist,wd,ht, mynumpymatrix1=pickle.load(f)
> f.close()
>
> if(filenamelist==oldfilelist):
> #if oldfilenamelst same,it means folder hasn't changed
> #use the vals from cache.....
> else:
> #folder changed
> mynumpymatrix1,imgwdth,imght=docalculations()
> f3=open(cachefile,"w")
> pickle.dump((filenameslist,imgwdth,imght,mynumpymatrix1),f3)
> f3.close()
>
> this works and does what i need in my code..but i want to know if a
> more elegant solution is possible
> i am not worried about someone deliberately renaming files like
> aaaa.jpeg to aaa.jped and a.jpeg to deceive the checking
> since it is assumed that noone has permission to modify the folder
> except a trusted admin/code
>
> will be grateful for your suggestions
> tia
I'd try to avoid duplicating the calculation code.
get newfilenameslist
update_cache = True
try:
f=open(cachefile)
except IOError:
pass
else:
read oldfilenameslist
f.close()
if oldfilenameslist==newfilenameslist:
update_cache = False
if update_cache:
do calculations
write file
Also, if you split the data in two, you can just read the filename list
alone:
pickle.dump(filenameslist, f2)
pickle.dump((imgwdth,imght,mynumpymatrix1),f2)
--
Gabriel Genellina