2016-07-05 232 views
0

下載不能在python中工作?使用python腳本從FTP位置下載目錄/文件

我寫了一個簡單的python程序,爲了從FTP位置獲取文件,但是當我執行它時,它給出了錯誤[Errno 13] Permission denied message。

我的代碼如下。任何想法爲什麼它不工作?

import ftplib 
from ftplib import FTP, error_perm 

def getFTPDir(dirpath): 

    f = ftplib.FTP(ip, username, password) 

    try: 
     f.cwd(dirpath) 
     nameList = f.nlst() 
     oldest = nameList[0] 
     newest = nameList[-1] 

     newest = oldest 

     newDirPath = dirpath +'/'+ newest 

     print f.cwd(newDirPath) 
     subNameList = f.nlst() 

     for i in range (len(subNameList)): 
      f.cwd(newDirPath + '/' + str(subNameList[i])) 
      nameList1 = f.nlst() 

      filename = nameList1[i] 
      print "downloading..............", filename 


      f.retrbinary('RETR '+ filename, open(os.path.join(destination,localPath),"wb").write) 
      print filename + " downloaded" 

      try: 
       fhandle = open(filename, 'wb') 
       f.retrbinary('RETR ' + filename, fhandle.write) 

      except Exception, e: 
       print str(e) 

      finally: 
       fhandle.close() 

    except error_perm: 
     return 

    except Exception, e: 
     print str(e) 

    finally: 
     f.close() 
+0

請在哪一行出現錯誤說...' –

+0

f.retrbinary('RETR'+ filename,open – Dush

回答

0

FTPLIB的文檔說(強調礦):

FTP.retrbinary(命令,回調[,maxblocksize [,休息]])

檢索二進制傳輸模式文件。命令應該是一個合適的RETR命令:'RETR filename'。 爲每個接收到的數據塊調用回調函數,使用一個字符串參數給出數據塊。

因此,有2個可能的錯誤會導致在此:

  • destinationlocalPath可以指向一個不存在的文件夾或不寫文件夾或文件(順便說一句,你將改寫在每次迭代相同的文件...)
  • 如果在一個單塊未轉移的文件,試圖打開每個塊的目標文件,但不關閉任何

這樣不行,b UT繼續做你的下一行寫的,甚至更好的使用有:

try: 
     localname = os.path.join(destination,localPath) 
     # a spy to control the names, comment it out when it works 
     print filename, " -> ", localname 
     with open(localname, 'wb') as fhandle 
      f.retrbinary('RETR ' + filename, fhandle.write) 

    except Exception as e: 
     print str(e) 

這樣的話,你可以看到你嘗試寫...