Brian Beck wrote: > OriginalBrownster wrote: > > I want to zip all the files within a directory called "temp" > > and have the zip archive saved in a directory with temp called ziptemp > > > > I was trying to read up on how to use the zipfile module python > > provides, but I cannot seem to find adequate documentation on function > > itself. > > > > Perhaps someone could help me in this task? > > Hello, > > This isn't completely tested, but perhaps it will help you get started: > > from os import listdir, mkdir > from os.path import join, basename, isfile > from zipfile import ZipFile > > def zip_dir(path, output_path, include_hidden=True): > files = [join(path, f) for f in listdir(path) if isfile(join(path, f))] > try: > mkdir(output_path) > except OSError, e: > if e.errno == 17: # Path exists > pass > zip_file = ZipFile(join(output_path, 'temp.zip'), 'w') > for f in files: > if basename(f).startswith('.') and not include_hidden: > continue > print "Adding %s to archive..." % (f,) > zip_file.write(f) > zip_file.close() > > Use like: > zip_dir('temp', 'temp/ziptemp') > > Note that if you want to add the entire contents of a directory > (subdirectories, recursively), you should consider using os.walk or > something similar. This will only add the file contents of the directory. > I'm not sure if the zipfile module provides any nice ways to write > directories to the archive, but I'm assuming it just involves writing an > arcname with a '/' in it (see help(zipfile.ZipFile)). > > -- > Brian Beck > Adventurer of the First Order
To avoid calling os.path.join() twice for each filename when you build the list of files you could write the list comprehension like so: [n for n in (join(path, f) for f in listdir(path)) if isfile(n)] Also, you should use the "symbolic" errors from the errno module rather than hard-coding a constant: from errno import EEXIST ... if e.errno == EEXIST: # Path exists Finally, if your using a single arg with a string interpolation and you know it'll never be a tuple you needn't wrap it in a tuple: print "Adding %s to archive..." % f -- http://mail.python.org/mailman/listinfo/python-list