Вот отредактированный код, который я запустил. Это основано на коде выше, взятом из списка рассылки. Я добавил импорт и сделал основной режим. Я также обрезал путаницу с выходным именем файла, чтобы сделать код короче.
#!/usr/bin/env python
import os, zipfile, glob, sys
def addFolderToZip(myZipFile,folder):
folder = folder.encode('ascii') #convert path to ascii for ZipFile Method
for file in glob.glob(folder+"/*"):
if os.path.isfile(file):
print file
myZipFile.write(file, os.path.basename(file), zipfile.ZIP_DEFLATED)
elif os.path.isdir(file):
addFolderToZip(myZipFile,file)
def createZipFile(filename,files,folders):
myZipFile = zipfile.ZipFile( filename, "w" ) # Open the zip file for writing
for file in files:
file = file.encode('ascii') #convert path to ascii for ZipFile Method
if os.path.isfile(file):
(filepath, filename) = os.path.split(file)
myZipFile.write( file, filename, zipfile.ZIP_DEFLATED )
for folder in folders:
addFolderToZip(myZipFile,folder)
myZipFile.close()
return (1,filename)
if __name__=="__main__":
#put everything in sys.argv[1] in out.zip, skip files
print createZipFile("out.zip", [], sys.argv[1])
На работе, на моем компьютере с Windows, этот код работал нормально, но не создавал никаких «папок» в zipfile. По крайней мере, я помню, что сделал. Теперь дома, на моем Linux-компьютере, созданный zip-файл кажется плохим:
$ unzip -l out.zip
Archive: out.zip
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
unzip: cannot find zipfile directory in one of out.zip or
out.zip.zip, and cannot find out.zip.ZIP, period.
Я не знаю, случайно ли я нарушил код, я думаю, что это то же самое. Проблемы с кроссплатформенностью? В любом случае, это не связано с моим первоначальным вопросом; получение папок в zip-файле. Просто хотел опубликовать код, который я на самом деле выполнял, а не код, на котором я основывал свой код.