2017-03-15 22 views
0

以下のスクリプトは、ftpディレクトリファイル内のファイルを読み取ることができますが、ダウンロードすることはできません。コマンドウィンドウに出力されたリストにはそれらが表示されるため、読んだことが分かります。ここでftpディレクトリのファイルを読み込み、ダウンロードしないスクリプト

from ftplib import FTP 
import os, sys, os.path 

def handleDownload(block): 
    file.write(block) 

ddir='U:/Test Folder' 
os.chdir(ddir) 
ftp = FTP('sidads.colorado.edu') 
ftp.login() 

print ('Logging in.') 
directory = '/pub/DATASETS/NOAA/G02158/unmasked/2012/04_Apr/' 

print ('Changing to ' + directory) 
ftp.cwd(directory) 
ftp.retrlines('LIST') 

print ('Accessing files') 

for subdir, dirs, files in os.walk(directory): 
    for file in files: 
     full_fname = os.path.join(root, fname); 
     print ('Opening local file ') 
     ftp.retrbinary('RETR U:/Test Folder' + fname, 
         handleDownload, 
         open(full_fname, 'wb')); 
     print ('Closing file ' + filename) 
     file.close(); 
ftp.close() 
+2

が、1字下げが正しくありません、そして2)あなたは 'に' file.closeを() 'やっていますファイル 'は文字列オブジェクトであり、3)ローカルファイルをリストし、その中にリモートファイルの内容を書き込んでいますか?あなたのローカルファイルは、サーバ上で名目上のファイルをダウンロードする前に存在する必要がありますか?それは論理的ではありません。 –

答えて

0

あなたがpysftpライブラリを使用してこれを行うことができます一つの方法です。申し訳ありません

import pysftp 

with pysftp.Connection('hostname', username='username', password='password') as sftp: 
    ftp_files = sftp.listdir('/ftp/dir/') 

    for file in ftp_files: 
     sftp.get(os.path.join('/ftp/dir/', file), localpath=os.path.join('/path/to/save/file/locally/', file)) 
関連する問題