2013-07-03 10 views
12

WindowsサーバーからUNIXサーバーにファイルをアップロードしようとしています(基本的にFTPを実行しようとしています)。FTPアップロードファイルPython

Traceback (most recent call last): 
    File "Windows\folder\which\has\file\MyFile.py", line 11, in <module> 
    ftp.storbinary('RETR %s' % filename, open(filename, 'w').write) 
    File "windows\folder\Python\lib\ftplib.py", line 466, in storbinary 
    buf = fp.read(blocksize) 
AttributeError: 'builtin_function_or_method' object has no attribute 'read' 

MyFile.pyのすべての内容が削除された:私は、私は次のエラーを取得しています

#!/usr/bin/python 
import ftplib 
import os 
filename = "MyFile.py" 
ftp = ftplib.FTP("xx.xx.xx.xx") 
ftp.login("UID", "PSW") 
ftp.cwd("/Unix/Folder/where/I/want/to/put/file") 
os.chdir(r"\\windows\folder\which\has\file") 
ftp.storbinary('RETR %s' % filename, open(filename, 'w').write) 

下のコードを使用しています。

誰かが間違っているとアドバイスできます。私はftp.storbinaryがFTPを使ってファイルをアップロードするために使用されていることを読んでいます。

答えて

12

バイナリ以外のファイル(テキストファイルなど)を保存する場合は、書き込みモードではなく読み取りモードに設定してみてください。 バイナリファイル(テキストエディタで開くことができないもの)を開き、あなたはおそらくべきのftpのlibを使用する予定がある場合

ftp.storbinary("STOR " + filename, open(filename, 'rb')) 

もあなたの中に読み取りバイナリモード用

ftp.storlines("STOR " + filename, open(filename, 'r')) 

チュートリアルを見て、私はこれをお勧めしたいと思いますarticleからeffbot。

+0

MyFile.pyの内容は削除されません。しかし、私はまだエラーをegtingしています。 – misguided

+2

storlinesを使用すると、myfileはテキストファイルであるとみなされます。他のファイル(画像、ムービー、アーカイブ、基本的にはテキストエディタで開くことはできません)はstorbinaryを使用し、http://bugs.pythonによると 'r –

+0

'の代わりに 'rb' .org/issue6822非バイナリファイルも 'rb 'フラグでオープンされなければなりませんが、それでも' storlines() 'でアップロードされます。ちょうどその問題に直面した 'r'と 'タイプstrが提供されたリンクのバッファAP'例外をサポートしていません。 –

3

ファイルをオブジェクトにすると、オペレーションの最後にファイルを閉じることができます。

myfile = open(filename, 'w') 
ftp.storbinary('RETR %s' % filename, myfile.write) 

と転送

myfile.close() 

これで問題が解決しないかもしれないが、それが役立つことの終わりに。

+0

ですが、同じエラーです。 – misguided

+0

ああ、最後にあなたがそれを理解したと聞いてよかった! – mbdavis

8

両方の提案を組み合わせました。最終回答は

#!/usr/bin/python 
import ftplib 
import os 
filename = "MyFile.py" 
ftp = ftplib.FTP("xx.xx.xx.xx") 
ftp.login("UID", "PSW") 
ftp.cwd("/Unix/Folder/where/I/want/to/put/file") 
os.chdir(r"\\windows\folder\which\has\file") 
myfile = open(filename, 'r') 
ftp.storlines('STOR ' + filename, myfile) 
myfile.close() 
+3

storlinesを使用すると、myfileはテキストファイルであるとみなされます。他のファイル(イメージ、ムービー、アーカイブ、基本的にはテキストエディタで開くことはできません)はstorbinaryを使用し、ファイルを 'r'の代わりに 'rb'で開くべきです –

+0

少なくとも現在のバージョンでは、ファイルをバイナリモード( 'rb')で開く必要があります。そうでないと、エラーが発生します。編集:誰かがすでにこれを言っていたことを知りませんでした^ –

関連する問題