10

Python を使用してリモート zip アーカイブから、ファイル名に一致する選択したファイルを読み取る必要があります。完全な zip を一時ファイルに保存したくありません (それほど大きくないので、メモリ内のすべてを処理できます)。

私はすでにコードを書いており、それは機能します。後で検索できるように、自分でこれに答えています。しかし、私が Stackoverflow の愚かな参加者の 1 人であることを示す証拠があるので、改善の余地があると確信しています。

4

4 に答える 4

8

これが私がやった方法です(「.ranks」で終わるすべてのファイルを取得します):

import urllib2, cStringIO, zipfile

try:
    remotezip = urllib2.urlopen(url)
    zipinmemory = cStringIO.StringIO(remotezip.read())
    zip = zipfile.ZipFile(zipinmemory)
    for fn in zip.namelist():
        if fn.endswith(".ranks"):
            ranks_data = zip.read(fn)
            for line in ranks_data.split("\n"):
                # do something with each line
except urllib2.HTTPError:
    # handle exception
于 2008-09-18T17:03:42.850 に答える
4

質問と回答をくれた Marcel に感謝します (別のコンテキストで同じ問題が発生し、ファイルのようなオブジェクトが実際にはファイルのようなものではないという同じ問題に遭遇しました)。更新情報: Python 3.0 の場合、コードを少し変更する必要があります。

import urllib.request, io, zipfile

try:
    remotezip = urllib.request.urlopen(url)
    zipinmemory = io.BytesIO(remotezip.read())
    zip = zipfile.ZipFile(zipinmemory)
    for fn in zip.namelist():
        if fn.endswith(".ranks"):
            ranks_data = zip.read(fn)
            for line in ranks_data.split("\n"):
                # do something with each line
except urllib.request.HTTPError:
    # handle exception
于 2009-06-04T20:13:44.077 に答える
3

これにより、zip ファイル全体をダウンロードしなくても作業が完了します。

http://pypi.python.org/pypi/pyremotezip

于 2013-01-22T14:43:27.747 に答える
1

ZIP ファイルを単に解凍すると、セキュリティ上の脆弱性が生じる可能性があることに注意してください。

于 2008-09-18T17:07:38.850 に答える