2017-03-17 2 views
1

これまでのところ、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') 

filenames = ftp.nlst() # get filenames within the directory 
print (filenames) 

ここで問題が発生するのは、ファイルをフォルダにダウンロードすることです。以下のコードは私が試したことですが、書き込みを行う前にファイルが作成されていないため、パーミッションエラーが発生します。

for filename in filenames: 
    local_filename = os.path.join('C:/ArcGis/New folder', filename) 
    file = open(local_filename, 'wb') 
    ftp.retrbinary('RETR '+ filename, file.write) 
    file.close() 

ftp.quit() 

ここにエラーとコールバックがあります。

enter image description here

+0

コールスタックを含む正確なエラーメッセージを入力してください。 + 'C:/ ArcGis/New folder'フォルダは存在しますか? –

+0

はい、フォルダが存在し、編集にエラーが含まれます。 –

答えて

1

ディレクトリリストは、フォルダへの.の参照を含んでいます。

これをスキップする必要があります。ダウンロードできません。

for filename in filenames: 
    if filename != '.': 
     local_filename = os.path.join('C:/ArcGis/New folder', filename) 
     file = open(local_filename, 'wb') 
     ftp.retrbinary('RETR '+ filename, file.write) 
     file.close() 

実際には、リスティング内のすべてのフォルダをスキップする必要があります。

+0

この方法でファイルをダウンロードすることはできませんか? –

+0

もちろん可能です。しかし、リストにはディレクトリエントリも含まれているため、それらをスキップする必要があります! - いくつかの例を追加しました(私はPythonをやっていないので間違っているかもしれませんが、それはあなたにアイディアを与えるはずです) –

関連する問題