On Feb 6, 2:47 pm, "MRAB" <[EMAIL PROTECTED]> wrote: > 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! :-)- Hide quoted text - > > - Show quoted text -
What's the matter with PKZIP? It's been around forever. -- http://mail.python.org/mailman/listinfo/python-list