For_loops hurt my brain.

Dan thermostat at gmail.com
Wed Jul 16 14:00:05 EDT 2008


On Jul 16, 1:42 pm, bsag... at gmail.com wrote:
> This script uses a simple for loop to zip some files. However I am
> repeating code that cries out for a nested loop. My two lists of
> files_to_be_zipped (spare and seekfacts) are of uneven length so I
> can't seem to decipher the "for_logic". I would appreciate any help.
> Thanks, Bill
>
> import zipfile
> import os
>
> zips = [
> 'c:/spare.zip',
> 'c:/seekfacts.zip'
> ]
> spare = [
> 'c:/spare/huge.fm3',
> 'c:/spare/huge.wk3'
> ]
> seekfacts = [
> 'c:/seekfacts/bookmark.html',
> 'c:/seekfacts/index.htm',
> 'c:/seekfacts/seek.css',
> 'c:/seekfacts/seek.js'
> ]
>
> zFile = zipfile.ZipFile(zips[0], 'w')
> for files in spare:
>         zFile.write(files, os.path.basename(files), zipfile.ZIP_DEFLATED)
> zFile.close()
>
> zFile = zipfile.ZipFile(zips[1], 'w')
> for files in seekfacts:
>         zFile.write(files, os.path.basename(files), zipfile.ZIP_DEFLATED)
> zFile.close()

I would do something like this:
# UNTESTED

import zipfile
import os

zip_dict = { 'spare' : ['c:/spare.zip', 'c:/seekfacts.zip'],
             'seekfacts' : [
'c:/seekfacts/bookmark.html',
'c:/seekfacts/index.htm',
'c:/seekfacts/seek.css',
'c:/seekfacts/seek.js'
] }

for key,value in zip_dict.items():
    zFile = zipfile.ZipFile("c:/%s.zip" % key, 'w')
    for fname in value:
        zFile.write(fname, os.path.basename(files),
                    zipfile.ZIP_DEFLATED)
    zFile.close()

# End untested code.

This implicitly maps thing with the key foo to the zip file c:/
foo.zip, but if you want to be more general, I would suggest thinking
about making a class.

-Dan



More information about the Python-list mailing list