Использование 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:\Python27\working.py", line 19, in <module> ZipFile.write(str(a), zipfile.ZIP_DEFLATED) File "C:\Python27\lib\zipfile.py", line 1121, in write arcname = os.path.normpath(os.path.splitdrive(arcname)[1]) File "C:\Python27\lib\ntpath.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 нормализуется.

согласно вышеприведенному руководству, окончательный вариант: (просто соединяя их, если это может быть полезно)

 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)