3

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

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

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

我必须在指定路径(此处为 C:\temp)中制作包含列表(此处为 listX)中包含的所有文件的 zip 文件。

我尝试了 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')

4

1 回答 1

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)
于 2013-02-23T00:11:25.190 回答