2016-07-05 13 views
0

ダウンロードはPythonで動作しませんか?pythonスクリプトを使用してFTPロケーションからディレクトリ/ファイルをダウンロード

私は単純なpythonプログラムを書いてFTPの場所からファイルを取得しましたが、実行するとエラー[Errno 13] Permission deniedメッセージが表示されます。

私のコードは以下の通りです。なぜそれが機能していないのか?

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

エラーが発生した行かに言ってください...あなたが書いてみるところ

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) 

こうすることで、あなたが見ることができます:UTはあなたが次の行に書いたものをやって続ける、あるいはさらに良いと使用します... –

+0

f.retrbinary( 'RETR' + filename、open(os.path.join(destination、localPath)、 "wb"))write) – Dush

答えて

0

ftplibののドキュメント(鉱山を強調)言う:

FTP.retrbinary(コマンド、コールバック[、[、残り] maxblocksize])を

バイナリ転送モードでファイルを取得します。コマンドは適切なRETRコマンドでなければなりません: 'RETR filename'。 コールブロック関数は、ブロックのデータを受信し、データブロックを与える単一の文字列引数で呼び出されます。

だから、2つの可能なエラーがここにあり原因とされています

  • destinationlocalPathは非実在のフォルダにまたは非書き込み可能なフォルダやファイルを指すことができ(ところで、あなたは各反復で同じファイルを書き換えます...)
  • 1つのブロックで転送しませ内のファイルは、あなたが何

はそれをしないでください閉じることなく、各ブロックの出力先のファイルを開こうとすると、B

関連する問題