2015-10-12 39 views
0

我在代码中丢失了什么(#代替注释行中的代码行)将test.py文件存档在zip文件夹中?在python中创建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() 
+2

http://stackoverflow.com/questions/1855095/how-to-create-a-zip-目录归档 – user1514631

+0

@ user1514631为什么在这个问题中写入了root而不是path,在os.path.join里面?你可以向我解释这部分吗? – commandos2389

+0

os.walk(path)返回一个元组列表,该元组的第一个元素是当前目录(一些调用root,并且这个目录会随着os.walk进入目录而改变),通过加入当前的根目录文件名,您可以获得当前文件的完整路径名。链接答案中的“变量”路径是os.walk开始的起始目录。为了更好地理解,只需在您的zipdir函数中打印根目录,目录,文件,这样您就可以看到发生了什么。 – user1514631

回答

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

+0

为什么在这个答案(在你提供给我的链接上)写的是root而不是路径,在os.path.join里面?你可以更好地解释我这部分,我不明白吗? – commandos2389

+0

对不起,这是来自我的代码,当我用不同的变量运行我的电脑时。正确的表达式是'ziph.write(os.path.join(path,file))'。这个函数基本上建立了目录中每个文件的整个路径。 'os.walk()'返回一个由三个元素组成的元组。第一个是目录的完整路径,第二个是目录内的子目录,第三个是文件名。要做zip文件,你必须为每个文件提供完整的路径,这就是为什么你必须“加入”目录('root')到'file'的路径。我确定了我的答案;) –