1

だから私はこのページのドキュメントに従いました: http://docs.python.org/library/ftplib.html#ftplib.FTP.retrbinary

そして、「retrbinary」が何をするのかについて混乱しているかもしれません...私はそれがバイナリファイルを取得し、そこからそれを開いてそのファイルに書き出すことができると考えています。

これが私に問題を与えている行です...

ftp.retrbinary('RETR temp.txt',open('temp.txt','wb').write)    

私が理解していないのは、temp.txtに書き出したいので、試していました

ftp.retrbinary('RETR temp.txt',open('temp.txt','wb').write('some new txt'))    

しかし、エラーが発生しました。FTP 接続を確立し、pwd()、cwd()、rename() などを実行できました。

PS私はこれを可能な限りググろうとしています、ありがとう!

4

2 に答える 2

2

サーバーからファイルをダウンロードしようとした場合は、元のコードが機能しているはずです。このretrbinaryコマンドは、指定した関数オブジェクト(つまり、()後にない関数の名前)を受け入れます。データ(バイナリファイル)が到着するたびに呼び出されます。この場合、編集writeしたファイルのメソッドが呼び出されます。これは、データがテキストファイルであると想定し、改行文字を適切に変換するため(ただし、画像などが破損しているため)、openとは少し異なります。retrlinesretrlines

さらに読むと、サーバー上のファイルに書き込もうとしているように見えます。その場合、readstore関数によって呼び出されるファイルオブジェクト(またはファイルのように動作するメソッドを持つ他のオブジェクト)を渡す必要があります。

ftp.storbinary("STOR test.txt", open("file_on_my_computer.txt", "rb"))
于 2009-06-10T03:34:54.477 に答える
0

ftp.retrbinaryは、コールバック関数として2番目の引数を取ります。これは、ファイルオブジェクトieopen('temp.txt'、'wb')。writeのメソッドを直接書き込むことができますが、代わりにwriteを直接呼び出します。

独自のコールバックを提供して、データでやりたいことを何でもすることができます

def mywriter(data):
    print data
ftp.retrbinary('RETR temp.txt', mywriter)
于 2009-06-10T03:37:56.817 に答える