【问题标题】:creating zip archive in python在python中创建zip存档
【发布时间】: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()

【问题讨论】:

  • @user1514631 为什么在这个问题中写根而不是路径,在里面 os.path.join ?你能解释一下这部分吗?
  • os.walk(path) 返回一个元组列表,该元组的第一个元素是当前目录(有些人称之为 root,并且随着 os.walk 下降到目录中而改变),通过将当前根与当前文件名连接,您将获得当前文件的完整路径名。链接答案中的“变量”路径是 os.walk 开始的起始目录。为了更好地理解,只需在您的 zipdir 函数中打印根目录、目录和文件,这样您一定会看到发生了什么。

标签: python zip archive


【解决方案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。我修正了我的答案;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多