2012-10-08 11 views
12

私はZipFileパッケージをPythonでzipファイルに使用しています。私のコードは次のとおりです。PythonでZipfileを使用して、フラット化されたディレクトリ構造を持つファイルをどのように圧縮できますか?

archive = zipfile.ZipFile(join(settings.ARCHIVES_DIR, 'test.zip'), "a") 

for pdffile in glob.glob(join(settings.IBILLING_DIR, '*.pdf')): 
    archive.write(pdffile) 

archive.close() 

私が直面している問題は、作成されたZIPファイルにディレクトリ構造が含まれていることです。追加されるファイルには絶対パスが追加されます。つまり、アーカイブを抽出するユーザーは、ディレクトリ構造を取得することになります。 ZIPにファイルを追加したいのですが、ディレクトリ構造は一切ありません。

どうすればいいですか?私はドキュメントでこの情報を見つけられませんでした。

おかげ

+0

グロープではなく、 'os.walk'を試してみますか? – wim

答えて

17

最初にすることarchive.writeラインを変更し、その後

import os 

を追加します。

archive.write(pdffile, os.path.basename(pdffile)) 

これは、それぞれのpdfと等価パスでzipファイルに書き込まれることを指定します(arcname parameter for the write() callを指定して)読み込み元のパスのファイル名部分のみを指定します。

ただし、異なるディレクトリに同じ名前の2つのPDFファイルがある場合、別のディレクトリを上書きすることになります。

関連する問題