ftp 経由で zip ファイルをダウンロードしようとしていますが、実際に zip を保存せずに内部のファイルを抽出します。これを行う方法はありますか?
4 に答える
zipfile.openを使用
アーカイブからメモリにメンバーを開きます。ZipFile は任意のファイルのようなオブジェクトをパラメーターとして受け入れるため、HTTP/FTP サーバーなどの多くのソースから取得できます。
import urllib
import io
from zipfile import ZipFile
mysock = urllib.urlopen('ftp://ftp.yourhost.com/spam.zip') // check urllib for parameters
memfile = io.BytesIO(mysock.read())
with ZipFile(memfile, 'r') as myzip:
f = myzip.open('eggs.txt')
content = f.read() // or other file-like commands
Python インメモリ zip ライブラリも確認してください
このftplib
モジュールを使用すると、FTP 経由でファイルをダウンロードできます。
このzipfile
モジュールを使用すると、zip ファイルからファイルを抽出できます。
ここにキーがあります。このio.BytesIO
クラスを使用すると、ファイルを必要とするものにメモリ内のバイトを渡すことができます。(Python 2.x では、StringIO
モジュールは同様の機能を提供します。)
zipfile モジュールは、zip ファイルから何かを抽出するために使用できます。zipfile へのアクセスには ftplib が使用されます。残念ながら、ftplib は、zipfile がファイルの内容にアクセスするために使用するファイルのようなオブジェクトを提供していません。zipを読み取ってメモリに保存できると思います。たとえば、文字列に保存し、ファイルのようなオブジェクト(StringIO)にラップすることができますディスク。
個々のファイルを保存する必要はなく、ファイルにアクセスする (つまり、読み取る) だけの場合は、zipfile を使用してこれを行うことができます。