2

FTP サーバーからファイルをダウンロードしようとしていますが、許可拒否エラーが発生します。

Traceback (most recent call last):
   File "/Users/x34/Documents/Python/ftp_download.py", line 27, in <module>
     download()
   File "/Users/x34/Documents/Python/ftp_download.py", line 21, in download
     with open(filename,'wb') as f:
IOError: [Errno 13] Permission denied: '/p012r018_5dt19900722_z20_30.tif.gz'

手動または filezilla を使用したダウンロードは正常に機能しますが、以下のスクリプトは機能しません

from ftplib import ftp    
ftp = FTP(r'ftp.glcf.umd.edu')
ftp.login()

directory = 'glcf/Landsat/WRS2/p012/r018/p012r018_5dx19900722.TM-GLS1990'
filename = '/p012r018_5dt19900722_z20_30.tif.gz'

ftp.cwd(directory)

with open(filename,'wb') as f:
    ftp.retrbinary('RETR' + filename,f.write)

ftp.close()

別のメモ...そしておそらく私はドキュメントを読み間違えました-http ://docs.python.org/library/ftplib.htmlしかし、ftplibがファイルをダウンロードすることを決定した場所(デフォルトのダウンロードディレクトリ?)を完全には理解していません。このアプリケーションにより適した別のモジュールはありますか?

アップデート

サーバー上のファイル名の前に「/」が含まれていないことを明確にする必要があります。以前の試行が次のエラー ftplib.error_perm: 500 Unknown command で終了したため、正しいファイルの場所と名前を見つけるのに役立つように見えたため、単純に追加しました。

ファイルへのフルパスは

 ftp.glcf.umd.edu/glcf/Landsat/WRS2/p012/r018/p012r018_5dx19900722.TM-GLS1990/p012r018_5dt19900722_z20_30.tif.gz'
4

2 に答える 2

6

保存するように要求した場所にファイルを保存します。行with open(filename,'wb') as f:では、受信したコンテンツを保存するためにファイルを開いています。

また、ファイル名が で始まるため、ファイル システム/のルート ( ) に保存しようとしますが/、十分な権限がないように見えます。

これを試して:

from ftplib import ftp    
ftp = FTP(r'ftp.glcf.umd.edu')
ftp.login()

directory = 'glcf/Landsat/WRS2/p012/r018/p012r018_5dx19900722.TM-GLS1990'
filename = '/p012r018_5dt19900722_z20_30.tif.gz'

ftp.cwd(directory)

with open(filename[1:],'wb') as f: # slices the string, "cutting" out the "/"
    ftp.retrbinary('RETR ' + filename,f.write)

ftp.close()

ファイルシステムに書き込まれるようにファイル名を変更したことに注意してください (行with open(filename[1:],'wb') as f:)。スライス演算子がわからない場合は、この質問を見てください。

また、コード内の文字列の末尾にスペース文字を挿入する必要があり'RETR'ます。'RETR ' + filenameの代わりにする必要があり'RETR' + filenameます。' RETR somefile.txt' は FTP サーバーへのコマンドです。' RETRsomefile.txt' を実行していたため、ファイル名でコマンドが破損しています。

于 2012-08-10T23:58:53.003 に答える
0

2 つの場所で同じファイル名変数を使用していますが、ルート「/」は ftp で有効であると想定していますが、明らかにローカルでのアクセス許可の問題です。

ftp コマンドで「/」を使用してみてください。ただし、開いているローカル ファイルでは「/」は使用しません。

于 2012-08-11T00:02:48.417 に答える