使用Python将文件列表添加到zip文件中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Python将文件列表添加到zip文件中相关的知识,希望对你有一定的参考价值。

我想编写一个脚本将所有的'.py'文件添加到zip文件中。

这里是我所拥有的:

import zipfile
import os

working_folder = 'C:\Python27\'

files = os.listdir(working_folder)

files_py = []

for f in files:
    if f[-2:] == 'py':
        fff = working_folder + f
        files_py.append(fff)

ZipFile = zipfile.ZipFile("zip testing.zip", "w" )

for a in files_py:
    ZipFile.write(a, zipfile.ZIP_DEFLATED)

但是它给出了一个错误:

Traceback (most recent call last):
  File "C:Python27working.py", line 19, in <module>
    ZipFile.write(str(a), zipfile.ZIP_DEFLATED)
  File "C:Python27libzipfile.py", line 1121, in write
    arcname = os.path.normpath(os.path.splitdrive(arcname)[1])
  File "C:Python27lib
tpath.py", line 125, in splitdrive
    if p[1:2] == ':':
TypeError: 'int' object has no attribute '__getitem__'

似乎给定的文件名不正确。

答案

您需要将压缩类型作为关键字参数传递:

ZipFile.write(a, compress_type=zipfile.ZIP_DEFLATED)

[没有关键字参数,而是给ZipFile.write()一个整数arcname参数,这会导致您在arcname被标准化时看到错误。

另一答案

原著,2014年9月2日,3:52回答

根据上述指导,最终为:(只是将它们放在一起,以防可能有用)

import zipfile
import os

working_folder = 'C:\Python27\'

files = os.listdir(working_folder)

files_py = []

for f in files:
    if f.endswith('py'):
        fff = os.path.join(working_folder, f)
        files_py.append(fff)

ZipFile = zipfile.ZipFile("zip testing3.zip", "w" )

for a in files_py:
    ZipFile.write(os.path.basename(a), compress_type=zipfile.ZIP_DEFLATED)

2020年3月新增@jinzy在zip file and avoid directory structure的启发下,将上面的最后一行更改为下面,以避免zip文件中的文件结构。

ZipFile.write(a, "C:\" + os.path.basename(a), compress_type=zipfile.ZIP_DEFLATED)

以上是关于使用Python将文件列表添加到zip文件中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用生成的文件列表添加到zip csv文件中

如何以内存有效的方式将大量文件添加到 zip 中?

7zip:在C#中,如何将不同目录下的多个同名文件添加到同一个zip文件中?

如何将多个文件夹添加到一个 zip 文件中(将文件夹 1、文件夹 2 添加到包含少量文件的 myzip.zip filr)

如何将动态生成的pdf文件添加到zipfile Python?

使用 python 将二进制数据写入 zip 文件