3

私は数週間前からPythonを学んでいます。問題の 1 つで、リストに含まれるファイルを指定されたパスに圧縮する必要があります。Windowsで python を使用しています。

python zipall.py C:\temp C:\example

C:\example から特定の種類のファイルを抽出する必要があります。これは、いくつかのリスト (listX など) で正常に実行されました。ここでの作業は、zip 形式の listX 内のすべてのファイルで構成される zip ファイル C:\temp を作成することです。Pythonでこの操作を実行するには?

リスト(ここではlistX)に含まれるすべてのファイルを含む指定されたパス(ここではC:\ temp)にzipファイルを作成する必要があります。

以下のように zipfile.ZipFile() を試しました:

zip_name = zipfile.ZipFile(tozip, 'w')
l=len(listX)
ctr=0
for thelist in listX:
    zip_name = zipfile.ZipFile(tozip+str(ctr), 'w')
    if ctr<=l:
        ctr+=1
    zip_name.write(thelist,'zip')

確かに「l」zipファイルが作成されますが、tozipで指定されたパス(上記の「C:\ temp」)内に「l」zipファイルを作成する必要があります

4

1 に答える 1

1

zipfile.ZipFileは、ZIP ファイルを書き込む場所に出力 ZIP アーカイブを作成します。ただし、ディレクトリ名ではなく、ファイル名を指定する必要があります。tozipあなたの説明から、に設定されているように聞こえますC:\temp。その場合、次os.path.joinのようにファイル名を作成するために使用する必要があります。

import os.path
tozip = os.path.join(r'C:\temp', 'out.zip')

これにより、必要なディレクトリにアーカイブが作成されます。代わりに、便利な「tempfile」ライブラリを使用して、Windows パスをスクリプトにハードコードすることを避けることができることに注意してください。

import os.path
from tempfile import gettempdir
tozip = os.path.join(gettempdir(), 'out.zip')

さて、リストを繰り返し処理していると、作成している単一のアーカイブに各ファイルを一度に 1 つずつ追加したいと思いますよね? コードは をループしてlistXいますが、その中のファイルごとに新しいlistXZIP アーカイブを作成し、そのファイルを新しいアーカイブに追加しています。また、リストを見ていくと、新しい ZIP アーカイブを に割り当てるたびに、出力を本当に入れたいアーカイブを完全に忘れてしまうため、代わりに次のものが必要になると思います。zip_name

theZip = zipfile.ZipFile(tozip, 'w')
for elem in listX:
    theZip.write(elem)
于 2013-02-23T00:11:25.190 に答える