2012-06-28 26 views
5

मेरे कार्यक्रम सुचारू रूप से चलता है, लेकिन मैं अपने स्थानीय ड्राइव में ज़िप होने के लिए एफ़टीपी से मेरी फ़ाइलें चाहतेज़िप किया जा रहा फ़ाइलों

मेरे समस्या: केवल 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" मोड आप पुन: बनाने का मतलब है वहाँ shutil.make_archive() का उपयोग कर एक उदाहरण है यह खरोंच से।

इस (पाश से पहले ज़िप फ़ाइल crezate) का प्रयास करें:

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) 

या यह खुला, संलग्न मोड में 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

हाँ! यह काम!! नौसिखिया होने के लिए खेद है! मैं अभी भी सबसे अच्छा उत्तर बटन क्लिक नहीं कर सकता, 3 मिनट के लिए प्रतीक्षा करें। : डी फिर से धन्यवाद! – neo

0

बेस्ट ऐसा करने के लिए जिस तरह से कम से डिबग बयान देकर अपने छोरों के लिए, वहाँ दो संभावनाएं हैं;

एक है कि पहले forloop केवल एफ़टीपी फ़ोल्डर

दो से एक फाइल डाउनलोड करता है कि पहली पाश डाउनलोड सभी फाइलों लेकिन दूसरे लूप ज़िप उनमें से केवल एक

उपयोग प्रिंट बयान जो फ़ाइलें देखने के लिए लूप पर डाउनलोड/ज़िप किया जाता है, शुभकामनाएं

+0

सलाह के लिए धन्यवाद, मैं कोशिश करूँगा। वास्तव में पहला लूप ठीक है, यह मेरे ftp में सभी फ़ाइलों को डाउनलोड करता है लेकिन दूसरा पाश समस्या – neo

+0

कोई समस्या नहीं है, एक अच्छा दिन है! – serdarsenay

2

शटल मॉड्यूल पर एक नज़र डालें।

http://docs.python.org/library/shutil.html

+0

हमें उस के लिए ज़िपफाइल मॉड्यूल का उपयोग करने की आवश्यकता है। : डी – neo

+0

make_archive() zipfile मॉड्यूल का उपयोग कर रहा है। यह सिर्फ अधिक सुविधाजनक है, आईएमएचओ। – geertjanvdk