2012-08-14 92 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

相關問題