我想写一个脚本来添加所有的‘.py’文件到一个压缩文件。
这就是我所拥有的:
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__'所以似乎给出的文件名是不正确的。
发布于 2014-08-28 16:56:11
您需要将压缩类型作为关键字参数传入:
ZipFile.write(a, compress_type=zipfile.ZIP_DEFLATED)如果没有关键字参数,您将为ZipFile.write()提供一个整型arcname参数,这会导致您在arcname被规范化时看到的错误。
发布于 2014-09-02 11:52:53
14年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)
ZipFile.close()在2020年3月添加了由@jinzy at zip file and avoid directory structure启发的,上面的最后一行改为下面,以避免压缩文件中的文件结构。
ZipFile.write(a, "C:\\" + os.path.basename(a), compress_type=zipfile.ZIP_DEFLATED)https://stackoverflow.com/questions/25544475
复制相似问题