2012-06-28 44 views
5

我的計劃順利進行,但我想從FTP我的文件被壓縮在我的本地驅動器荏苒文件

我的問題:打電話給我的main()函數

這裏的後只有1個文件被拉鍊我的代碼:

主要

import os 
import upload 
import download 
import zipfile 
import ConfigParser 
import ftputil 

def main(): 

    #create a folder Temp on d drive for later use 
    path = r'D:\Temp' 
    os.mkdir(path) 

    #parse all the values at config.ini file 
    config = ConfigParser.ConfigParser() 
    config.readfp(open('config.ini')) 
    server = config.get('main', 'Server') 
    username = config.get('main', 'Username') 
    password = config.get('main', 'Password') 
    uploads = config.get('main', 'Upload folder') 
    downloads = config.get('main', 'Download folder') 

    #connect to ftp 
    ftp = ftputil.FTPHost(server, username, password) 

    dirlist = ftp.listdir(downloads) 

    for list in dirlist: 
     ftp.chdir(downloads) 
     target = os.path.join(path, list) 
     ftp.download(list, target) 


    ######################################################### 
    # THis section is where algo fails but the program run# 
    ######################################################## 

    #zipping files 
    absolute_path = r'D:\Temp' 
    dirlist = os.listdir(absolute_path) 
    filepath = r'D:\Temp\project2.zip' 
    for list in dirlist: 
     get_file = os.path.join(absolute_path, list) 
     zip_name = zipfile.ZipFile(filepath, 'w') 
     zip_name.write(get_file, 'Project2b\\' + list) 




if __name__ == '__main__': 
    print "cannot be" 
+0

你歸檔由最後一個文件'target'的? –

+0

如果沒有指定壓縮方法,zipfile.ZIP_DEFLATED文件將不會被壓縮。它應該是zipfile.ZipFile(filepath,'w',zipfile.ZIP_DEFLATED)包含壓縮 –

回答

6

當你這樣做:

for list in dirlist: 
     get_file = os.path.join(absolute_path, list) 
     zip_name = zipfile.ZipFile(filepath, 'w') 
     zip_name.write(get_file, 'Project2b\\' + list) 

重新創建ZipFile中的每個文件要郵政編碼,地址的"w"模式意味着你重建它從零開始。

試試這個(crezate循環之前的zip文件):

zip_name = zipfile.ZipFile(filepath, 'w') 
for list in dirlist: 
     get_file = os.path.join(absolute_path, list) 
     zip_name.write(get_file, 'Project2b\\' + list) 

或者這個開放的,以附加模式zip文件:

for list in dirlist: 
     get_file = os.path.join(absolute_path, list) 
     zip_name = zipfile.ZipFile(filepath, 'a') 
     zip_name.write(get_file, 'Project2b\\' + list) 
+0

是啊!這工作!對不起,作爲一個新手!我仍然無法點擊最佳答案按鈕,等待3分鐘。 :D再次感謝! – neo

0

做到這一點的最佳方式是通過把調試語句在你的for循環,有兩種可能性;

一個是第一個for循環只能從FTP文件夾

兩個下載一個文件是第一循環下載的所有文件,但第二循環拉鍊其中只有

使用打印語句之一來查看哪些文件在循環下載/壓縮,祝你好運

+0

感謝您的建議,我會嘗試。其實第一個循環沒問題,它下載我的FTP中的所有文件,但第二個循環是問題 – neo

+0

沒問題,祝你有美好的一天! – serdarsenay