2012-08-14 65 views
1

我正在尝试编写一个python脚本,它将在包含该目录所有内容的“backups”目录中创建一个ZIP。Python压缩同一文件中的所有其他内容

我的文件结构:

C:/ 
    Users/ 
     myuser/ 
      backups/ 
       blah.gif 
       config.xml 
       etc. 

所以我希望脚本创建一个C:/Users/myuser/backups/mybackup.zip包含backups/目录(blah.gif,​​3210等)的所有内容。

这里是我使用的代码:

backupDir = "C:/Users/myuser/backups/" 
backupFile = "mybackup.zip" 
file = zipfile.ZipFile(backupDir + backupFile, "w") 
for name in glob.glob(backupDir): 
    print "Found " + name 
    file.write(name, os.path.basename(name), zipfile.ZIP_DEFLATED) 
file.close() 

当我运行这个它会产生一个C:/Users/myuser/backups/mybackup.zip文件,但是当我将它解压缩,它是空的。我在哪里误入歧途?提前致谢!

+0

http://www.xinotes.org/notes/note/1034/ ......此外,我认为,zip文件在BACKUPDIR只要你说'文件创建= ...'然后将其在glob中,所以它试图将自己添加到自己......我认为它不会工作......并且可能会破坏整个过程......而将其保存到C:\ Windows \ Temp \ backup.zip ...可能帮助 – 2012-08-14 22:38:46

回答

3

glob预期模式匹配。我更喜欢使用os.listdir(),因为它更易于使用。

backupDir = "C:/Users/myuser/backups/" 
backupFile = "mybackup.zip" 
file = zipfile.ZipFile(backupDir + backupFile, "w") 
for name in os.listdir(backupDir): 
    if name == backupFile: 
     continue 
    fullname = backupDir + name 
    print "Found " + name 
    file.write(fullname, os.path.basename(name), zipfile.ZIP_DEFLATED) 
file.close() 
+0

您应该使用'os.path.join(backupDir,backupFile)'而不是'backupDir + backupFile'。这种情况下的结果是相同的,但是如果你忘记了第一个参数的尾部'/','os.path.join'会为你节省。此外,为了避免'if'语句,你可以在调用'ZipFile'之前执行'filesToZip = list(os.listdir(backupDir))'。 – 2012-08-16 05:46:45

+0

简单比复杂:) – drjd 2012-08-16 18:15:10

+0

明确比隐含:) – 2012-08-17 05:06:16

相关问题