I want to write a script to add all the ‘.py’ files into a zip file.
Here is what I have:
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)
However it gives an error:
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:Python27libntpath.py", line 125, in splitdrive if p[1:2] == ':': TypeError: 'int' object has no attribute '__getitem__'
so seems the file names given is not correct.
Advertisement
Answer
You need to pass in the compression type as a keyword argument:
ZipFile.write(a, compress_type=zipfile.ZIP_DEFLATED)
Without the keyword argument, you are giving ZipFile.write()
an integer arcname
argument instead, and that is causing the error you see as the arcname
is being normalised.