1

python ftplibを使用してバイナリファイルをリモートftpサーバーにアップロードしますが、転送は常に実際のサイズよりも小さくなります。ps:ローカルenvはWindows、リモートサーバーはlinuxです。私が使う:

    'ftp.storbinary('STOR %s' % filename,open(filename,'rb'))'

Pythonのapiread()は正しく機能していないと思います。実際には機能しない、いくつかの特殊な文字をEOFとして認識します。

バイトを失うことなくバイナリファイルをアップロードするにはどうすればよいですか?

4

2 に答える 2

2

私は実際にこの問題を乗り越えました。FTPサーバーにアップロードするためにファイルを開く前に、書き込まれていたファイルを閉じる必要がありました。

out2 = open('file.csv')
for r1 in cursor:
    out2.write(str(r1))
out2.close()

ftp_census = file_loc
stor_census = str("STOR egocensus_" + demoFileDate + ".csv")
fc = open(ftp_census, 'rb')
ftp.storbinary(stor_census, fc, 1024)

ファイルを閉じると、FTPサーバーのファイルサイズは正しいものでした。また、コードをわかりやすくするために、元の回答を編集しました。私はおそらくこれをより良くコーディングすることができますが、それは機能しています...

于 2018-11-28T23:25:22.947 に答える
0

理由を理解する前に、いくつかのハードテストが行​​われました。まず、これはPythonのバグではありません。転送されるファイルがメモリからディスクにフラッシュされていないため、次のようになります。

f.retrbinary('RETR '+filename, filehandler.write, bufsize) 

これを行った後、ファイルハンドラーは明示的に閉じられず、閉じられretrbinaryないため、すぐに保存すると、メモリ内の一部のバイトが失われます。したがって、ファイルハンドラーを保存した後で明示的に閉じると、次のようになります。

f.retrbinary('RETR '+filename, filehandler.write, bufsize)
filehandler.close()

次に、すべてのバイトを取得しました。詳細については、「http://blog.csdn.net/hongchangfirst」を参照してください。

于 2012-09-21T12:25:11.967 に答える