2012-06-28 23 views
5

My Programı sorunsuz ama benim yerel sürücüde zip olmak ftp den dosyalarımı istiyorumSıkıştırma dosyaları

Benim Sorun: Sadece 1 dosya

İşte benim ana() fonksiyonu çağırdıktan sonra sıkıştırılmış ediliyor benim kod: bunu yapmak için

ana

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

son dosya 'target' oluşur arşiv musunuz? –

+0

Sıkıştırma yöntemini kaçırıyorsanız, zipfile.ZIP_DEFLATED verilmezse dosyalar sıkıştırılmayacaktır. Öneriler için zipfile.ZipFile.ZipFile (dosya yolu, 'w', zipfile.ZIP_DEFLATED) olması tavsiye için –

cevap

6

: Her Eğer zip istediğiniz dosyayı için

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) 

Eğer bir sıkıştırılmış dosya yeniden, "w" mod yeniden anlamına shutil.make_archive() kullanarak bir örnek vardır sıfırdan.

bu (döngü önce zip dosyasını crezate) deneyin:

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) 

Ya da bu açık, modu ekleme zipfile:

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

Evet! bu çalışıyor!! Yeni bir çocuk olduğum için üzgünüm! Hala en iyi cevap düğmesine basamıyorum, 3 dakika bekleyin. : D Tekrar teşekkürler! – neo

0

iyi yolu en ayıklama ifadeleri koyarak aşağıdadır döngüler için, iki olasılık vardır;

biridir birinci forloop sadece ftp klasörüne

iki bir dosya indirir olmasıdır ilk döngü indirme tüm dosyaları ancak ikinci döngü fermuarlar bunlardan sadece biri

kullanım baskı ifadeleri hangi dosyaları görmek için o döngülerden indirilir/sıkıştırılır, iyi şanslar

+0

teşekkürler, bunu deneyeceğim. Aslında ilk döngü tamam, benim ftp içindeki tüm dosyaları indiriyor ama ikinci döngü sorun – neo

+0

Sorun yok, iyi günler! – serdarsenay

İlgili konular