将文件压缩到python中的指定路径

时间:2013-02-13 02:19:30

标签: python python-2.7

我几周以来一直在学习python。在其中一个问题中,我必须将列表中包含的文件压缩到指定的路径。我在 Windows 中使用python。

python zipall.py C:\ temp C:\ example

应从C:\ example中提取特定类型的文件,我在某些列表中成功完成(比如listX)。现在的工作是以zipped形式制作包含listX中所有文件的zip文件C:\ temp。如何在Python中执行此操作?

我必须在指定路径(此处为C:\ temp)中创建zip文件,其中包含list(此处为listX)中包含的所有文件。

我尝试了zipfile.ZipFile(),如下所示:

zip_name = zipfile.ZipFile(tozip, 'w')
l=len(listX)
ctr=0
for thelist in listX:
    zip_name = zipfile.ZipFile(tozip+str(ctr), 'w')
    if ctr<=l:
        ctr+=1
    zip_name.write(thelist,'zip')

它肯定会创建'l'zip文件,但我必须在tozip给出的路径中创建'l'zip文件(上面的'C:\ temp')

1 个答案:

答案 0 :(得分:1)

zipfile.ZipFile在您希望ZIP文件写入的位置为您创建输出ZIP存档。但是你需要给它一个文件名,而不是目录名。从您的说明中可以看出tozip设置为C:\temp。在这种情况下,您应该使用os.path.join来构造文件名,如下所示:

import os.path
tozip = os.path.join(r'C:\temp', 'out.zip')

这应该会为您提供在所需目录中创建的存档。请注意,您可以使用方便的'tempfile'库来避免将Windows路径硬编码到脚本中:

import os.path
from tempfile import gettempdir
tozip = os.path.join(gettempdir(), 'out.zip')

现在,当您在列表中进行迭代时,我认为您希望将每个文件一次添加到您正在创建的单个存档中,对吧?您的代码循环遍历listX,但对于listX中的每个文件,它都会创建 ZIP存档,并将该文件添加到新存档中。此外,当它通过列表时,因为每次您将新的ZIP存档分配给zip_name时,您完全忘记了真正想要输出的存档因此,我认为你想要这个:

theZip = zipfile.ZipFile(tozip, 'w')
for elem in listX:
    theZip.write(elem)