将文件夹内文件压缩至同目录时Python代码陷入无限循环的问题
问题原因
你把生成的test.zip放在了要压缩的目标文件夹里,os.walk遍历目录时会把这个刚创建的zip文件也扫进去,代码接着会把它添加到压缩包中——这个写入操作会修改zip文件,导致os.walk反复检测到该文件,最终陷入无限循环。
另外你的路径字符串存在隐患:Windows路径里的\U是转义序列,直接写会触发语法错误,得用原始字符串(路径前加r)或者双反斜杠。
修复后的代码
import os as __os import zipfile def zipdir(path, ziph, exclude_file): for root, dirs, files in __os.walk(path): for file in files: # 跳过要生成的压缩包文件,避免循环 if file == exclude_file: continue print(file) ziph.write(__os.path.join(root, file)) if __name__ == '__main__': zip_name = 'test.zip' # 用原始字符串处理Windows路径,避免转义问题 working_directory = r"C:\Users\Admin\Downloads\gaz" archive_name = __os.path.join(working_directory, zip_name) # 若之前存在同名压缩包,先删除(可选,避免重复写入) if __os.path.exists(archive_name): __os.remove(archive_name) with zipfile.ZipFile(archive_name, 'w', zipfile.ZIP_DEFLATED) as zipf: zipdir(working_directory, zipf, zip_name)
关键改动说明
- 给
zipdir函数添加exclude_file参数,遍历文件时跳过要生成的压缩包,从根源避免循环。 - 把路径改成原始字符串,解决Windows路径的转义问题。
- 新增删除已有同名压缩包的逻辑(可选),防止旧文件干扰新压缩包生成。
内容的提问来源于stack exchange,提问作者nbe
相关产品推荐
相关产品推荐

