2016-06-29 1 views
1

どのようにしてFTP urlを開いてファイルにダウンロードできますか?私はルックスにこのような何かしようとしている:Python open FTP urlとファイルに書き込む

from contextlib import closing 
from urllib.request import urlopen 

url = 'ftp://whatever.com/file.txt' 
target_path = 'file.txt' 

with closing(urlopen(url)) as source: 
    with open(target_path, 'wb') as target: 
     target.write(source) 

しかし、これは次のエラーで失敗します。

TypeError: 'addinfourl' does not support the buffer interface 

することは、この作品を作るための任意の簡単な方法はありますか?特にファイルを展開する際にファイルを展開するように拡張したいのですが?

+0

「クローズ」とは何ですか? FTP URLの内容と同じにしたいと思うでしょうか? – holdenweb

+0

お詫び申し上げます、私はうさぎのコードスニペットを投稿しました。私はインポートステートメントを追加しました。 –

答えて

0

write特定bytesにおけるバッファインタフェースを持つオブジェクトを必要とするが、sourceは実際BufferedReader(又はHTTPResonse HTTPの場合)です。あなたが呼び出す必要があるバイトを取得するにはBufferedReader.read()

from contextlib import closing 
from urllib.request import urlopen 

url = 'ftp://whatever.com/file.txt' 
target_path = 'file.txt' 

with closing(urlopen(url)) as source: 
    with open(target_path, 'wb') as target: 
     target.write(source.read()) 
+0

これはうまくいきますが、私が理解する限り、ファイル全体をメモリにダウンロードしてディスクに書き込むのですよね?大容量のファイルには問題があります。 –

+0

'read()'はループで使用できる 'size'を受け入れます。 – kwarunek

+0

はい、私はそれを使うことができますが、手動ループを書くことなくこれを行う方法があるのだろうかと思っていました。 –

関連する問題