使用shutil模块压缩文件时遭遇AttributeError问题求助
解决shutil压缩文件错误并实现目录打包
错误原因分析
- 脚本命名冲突:你的脚本文件名为
shutil.py,执行import shutil时,Python会优先导入当前目录下的这个文件,而非标准库的shutil模块,导致循环导入,同时无法找到标准库中的正确方法。 - 方法名错误:
shutil模块不存在name_archive方法,正确的压缩方法是make_archive。
正确实现步骤
- 重命名脚本文件:把你的脚本文件名从
shutil.py改为其他名称(比如zip_files.py),避免和标准库模块名冲突。 - 使用正确的压缩方法:通过
shutil.make_archive完成目录打包,参数说明:base_name:输出压缩包的文件名(无需带格式后缀,例如填output会生成output.zip)format:压缩格式,此处填ziproot_dir:需要压缩的目标目录,即你的files目录
正确代码示例
import shutil # 将files目录打包为output.zip shutil.make_archive("output", "zip", "files")
如果需要更灵活的压缩控制(比如指定特定文件、排除部分文件),可以使用zipfile模块,示例如下:
import zipfile import os def zip_directory(directory_path, output_path): with zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED) as zipf: for root, dirs, files in os.walk(directory_path): for file in files: file_path = os.path.join(root, file) # 计算相对路径,避免压缩包包含完整绝对路径 arcname = os.path.relpath(file_path, directory_path) zipf.write(file_path, arcname) # 调用函数打包files目录为output.zip zip_directory("files", "output.zip")
内容的提问来源于stack exchange,提问作者frankyb
相关产品推荐
相关产品推荐

