1. ホーム
  2. python

[解決済み] python/zip: zip アーカイブでファイルの絶対パスが提供されている場合、絶対パスを削除するには?

2023-05-16 11:37:51

質問

私は2つのファイルを2つの異なるディレクトリに持っています。 '/home/test/first/first.pdf' で、もうひとつは '/home/text/second/second.pdf' . これらを圧縮するために、以下のコードを使用しています。

import zipfile, StringIO
buffer = StringIO.StringIO()
first_path = '/home/test/first/first.pdf'
second_path = '/home/text/second/second.pdf'
zip = zipfile.ZipFile(buffer, 'w')
zip.write(first_path)
zip.write(second_path)
zip.close()

作成したzipファイルを開いてみると home フォルダがあり、その中に2つのサブフォルダがあります。 firstsecond の順に記述し、次にpdfファイルを記述します。フルパスでZIPアーカイブに圧縮されるのではなく、2つのpdfファイルだけを含める方法がわかりません。私の質問が明確であることを願っています。ありがとうございます。

どのように解決するのですか?

zipfile write() メソッドは、zip ファイルに格納されるアーカイブ名である追加引数 (arcname) をサポートしているので、コードを変更するだけでよいでしょう。

from os.path import basename
...
zip.write(first_path, basename(first_path))
zip.write(second_path, basename(second_path))
zip.close()

のドキュメントを読んでいる暇があったら zipfile のドキュメントを読むとよいでしょう。