Simon Forman a écrit :
> 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
>
Other solutions:
you can try the rar command line from WinRar but it's not recommended.
This is a very slow manner to compress file. Or you can try the Bz
module of python.
--
http://mail.python.org/mailman/listinfo/python-list