网上要么没有,要么方法都是不对的。 直接上代码,应该注释挺清楚了,不多说了^_^ import os import sys import zipfile #获取脚本路径, 如果是在IDE下运行,只能用此方式获取 def get_cur_dir(): path = sys.path[0] #判断为脚本文件还是py2exe编译后的文件,如果是脚本文件,则返回的是脚本的目录,如果是py2exe编译后的文件,则返回的是编译后的文件路径 if os.path.isdir(path): return path elif os.path.isfile(path): return os.path.dirname(path) def recurse_files(input_path, result): files = os.listdir(input_path) for file in files: if os.path.isdir(os.path.join(input_path,file)): if file != 'users': #过滤文件夹 recurse_files(os.path.join(input_path,file), result) else: ext = os.path.splitext(file)[1] if input_path == cur_dir:#根目录只添加特定类型文件 if ext == '.dll' or ext == '.exe' or ext == '.qm': result.append(os.path.join(input_path,file)) else: result.append(os.path.join(input_path,file)) if __name__ == '__main__': cur_dir = get_cur_dir() zip_file_name = os.path.join(cur_dir, 'debug.zip'); if os.path.isfile(zip_file_name): os.remove(zip_file_name) zip = zipfile.ZipFile(zip_file_name, 'w', zipfile.ZIP_DEFLATED) filelists = [] recurse_files(cur_dir, filelists) for file in filelists: arcName = file #在压缩包内名字 if os.path.dirname(file) == cur_dir: arcName = os.path.basename(file) #文件在要压缩目录下,则只为文件名 else: dir = os.path.dirname(file) dir = dir.replace(cur_dir + '\\', '') #只从要压缩的目录下当前目录名开始 arcName = dir + '\\' + os.path.basename(file) zip.write(file, arcName) #zip.write(file) #会出现全路径 # 调用了close方法才会保证完成压缩 zip.close()