你必须给出一个arcname
论证ZipFile.write() http://docs.python.org/2/library/zipfile.html#zipfile.ZipFile.write使用相对路径。通过给出要删除的根路径来执行此操作makeArchive()
:
def makeArchive(fileList, archive, root):
"""
'fileList' is a list of file names - full path each name
'archive' is the file name for the archive with a full path
"""
a = zipfile.ZipFile(archive, 'w', zipfile.ZIP_DEFLATED)
for f in fileList:
print "archiving file %s" % (f)
a.write(f, os.path.relpath(f, root))
a.close()
并调用它:
makeArchive(dirEntries(folder, True), zipname, folder)
我已经把毯子拿掉了try:
, except:
;这里没有任何用处,只是用来隐藏您想了解的问题。
The os.path.relpath() http://docs.python.org/2/library/os.path.html#os.path.relpath函数返回相对于的路径root
,有效地从存档条目中删除该根路径。
在 python 2.5 上,relpath
功能不可用;对于这个特定的用例,以下替换可以工作:
def relpath(filename, root):
return filename[len(root):].lstrip(os.path.sep).lstrip(os.path.altsep)
and use:
a.write(f, relpath(f, root))
注意上面的relpath()
函数仅适用于您的特定情况filepath
保证开始于root
;在 Windows 上,一般情况为relpath()
要复杂得多。如果可能的话,您确实想升级到 Python 2.6 或更高版本。