On Feb 6, 1:48 am, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote: > On Feb 4, 12:42 pm, "Jandre" <[EMAIL PROTECTED]> wrote: > > > > > On Feb 1, 9:39 pm, Larry Bates <[EMAIL PROTECTED]> wrote: > > > > Jandre wrote: > > > > Hi > > > > > I am a python novice and I am trying to write a python script (most of > > > > the code is borrowed) to Zip a directory containing some other > > > > directories and files. The script zips all the files fine but when it > > > > tries to zip one of the directories it fails with the following > > > > error: > > > > "IOError: [Errno 13] Permission denied: 'c:\\aaa\\temp'" > > > > > The script I am using is: > > > > > import zipfile, os > > > > > def toZip( directory, zipFile ): > > > > """Sample for storing directory to a ZipFile""" > > > > z = zipfile.ZipFile( > > > > zipFile, 'w', compression=zipfile.ZIP_DEFLATED > > > > ) > > > > def walker( zip, directory, files, root=directory ): > > > > for file in files: > > > > file = os.path.join( directory, file ) > > > > # yes, the +1 is hacky... > > > > archiveName = file[len(os.path.commonprefix( (root, > > > > file) ))+1:] > > > > zip.write( file, archiveName, zipfile.ZIP_DEFLATED ) > > > > print file > > > > os.path.walk( directory, walker, z ) > > > > z.close() > > > > return zipFile > > > > > if __name__ == "__main__": > > > > toZip( 'c:\\aaa', 'c:\\aaa\\test.zip' ) > > > > > I have tried to set the permissions on the folder, but when I check > > > > the directory permissions it is set back to "Read Only" > > > > > Any suggestions? > > > > > Thanks > > > > Johan Balt > > > > Couple of quick suggestions that may help: > > > > 1) don't use 'file' as a variable name. It will mask > > > the builtin file function. If it hasn't bitten you before > > > it will if you keep doing that. > > > > 2) If you put the target .zip file in the directory you are > > > backing what do you expect the program to do when it comes > > > to the file you are creating as you walk the directory? You > > > haven't done anything to 'skip' it. > > > > 3) Your commonprefix and +1 appears to result in same > > > information that the easier to use os.path.basename() > > > would give you. Double check me on that. > > > > I don't see anything that references C:\\aaa\temp in your > > > code. Does it exist on your hard drive? If so does it > > > maybe contain temp files that are open? zipfile module > > > can't handle open files. You must use try/except to > > > catch these errors. > > > > Hope info helps. > > > > -Larry > > > Thank you Larry. > > I've changed the code as epr your advice. The code is now: > > > import zipfile, os > > > def toZip( directory, zipFile ): > > """Sample for storing directory to a ZipFile""" > > z = zipfile.ZipFile( > > zipFile, 'w', compression=zipfile.ZIP_DEFLATED > > ) > > def walker( zip, directory, files, root=directory ): > > for f in files: > > f = os.path.join( directory, f ) > > archiveName = os.path.basename(f) > > zip.write( f, archiveName, zipfile.ZIP_DEFLATED ) > > print f > > os.path.walk( directory, walker, z ) > > z.close() > > return zipFile > > > if __name__ == "__main__": > > toZip( 'c:\\aaa\\', 'c:\\bbb\\test.zip' ) > > > I still get the same error: > > Traceback (most recent call last): > > File "C:\Python24\Lib\site-packages\pythonwin\pywin\framework > > \scriptutils.py", line 310, in RunScript > > exec codeObject in __main__.__dict__ > > File "C:\Python24\Scripts\dirZip.py", line 20, in ? > > toZip( 'c:\\aaa\\', 'c:\\bbb\\test.zip' ) > > File "C:\Python24\Scripts\dirZip.py", line 14, in toZip > > os.path.walk( directory, walker, z ) > > File "C:\Python24\lib\ntpath.py", line 329, in walk > > func(arg, top, names) > > File "C:\Python24\Scripts\dirZip.py", line 12, in walker > > zip.write( f, archiveName, zipfile.ZIP_DEFLATED ) > > File "C:\Python24\lib\zipfile.py", line 405, in write > > fp = open(filename, "rb") > > IOError: [Errno 13] Permission denied: 'c:\\aaa\\temp' > > > c:\\aaa\\temp is a directory in the directory I an trying to zip. I > > want to use this script to back up my work once a day and would like > > to > > keep the directory structure as is. I can zip the files in c:\aaa\tem > > fine so I guess that there aren't any open files in the directory. > > Any more ideas? > > Hi Jandre, > > Your code is treating the directory as a file and trying to open it > and read its bytes to zip them. You'll need to differentiate between > files and directories. > > You'll need to check out the Zip module to see how it expects files > that should be nested within folders. I believe you'll need to set the > archive name for the nested files to something like \\temp\\file.ext > etc. > In my experience, zip files don't contain nested folders, instead they contain a 'flat' list of files. Files in subfolders are represented by relative path names containing slashes and empty subfolders are represented by relative paths ending in a slash,.for example "File1.txt", "Folder1/File2.dat", "Folder2/Folder3/". This seems to work for me! :-)
-- http://mail.python.org/mailman/listinfo/python-list