在python中创建zip存档
Posted
技术标签:
【中文标题】在python中创建zip存档【英文标题】:creating zip archive in python 【发布时间】:2015-10-12 10:33:18 【问题描述】:我在这段代码中缺少什么(#而不是代码中的注释行)将 test.py 文件存档在 zip 文件夹中?
#!/usr/bin/python
import zipfile,os
path='/home/user/Desktop'
def zipdir(path, zipf):
for file in os.walk(path):
#zipf.write(os.path.join(root,path))
if __name__ == "__main__":
zipf = zipfile.ZipFile('test.zip', 'w')
zipdir(path, zipf)
zipf.close()
【问题讨论】:
***.com/questions/1855095/… @user1514631 为什么在这个问题中写根而不是路径,在里面 os.path.join ?你能解释一下这部分吗? os.walk(path) 返回一个元组列表,该元组的第一个元素是当前目录(有些人称之为 root,并且随着 os.walk 下降到目录中而改变),通过将当前根与当前文件名连接,您将获得当前文件的完整路径名。链接答案中的“变量”路径是 os.walk 开始的起始目录。为了更好地理解,只需在您的 zipdir 函数中打印根目录、目录和文件,这样您一定会看到发生了什么。 【参考方案1】:问题是你没有解压 os.walk() 函数返回的所有变量,所以你告诉程序压缩元组而不是路径。您必须在zipdir()
函数中进行以下更改:
def zipdir(path, ziph):
for root, dirs, files in os.walk(path):
for file in files:
ziph.write(os.path.join(root,file))
检查以下答案:How to create a zip archive of a directory
【讨论】:
为什么在这个答案中(在你提供给我的链接上)写根而不是路径,在 os.path.join 内?你能否更好地解释一下这部分,我不明白? 对不起,这来自我的代码,当我使用不同的变量运行我的计算机时。正确的表达式是ziph.write(os.path.join(path, file))
。这个函数基本上构建了目录中每个文件的完整路径。 os.walk()
返回三个元素的元组。第一个是列出的目录的完整路径,第二个是目录中的子目录,第三个是文件名。要进行压缩,您必须提供每个文件的完整路径,这就是为什么您必须将join
的目录路径 (root
) 提供给file
。我修正了我的答案;)以上是关于在python中创建zip存档的主要内容,如果未能解决你的问题,请参考以下文章
使用 System.IO.Compression 在内存中创建 ZIP 存档