2つの異なるディレクトリに2つのファイルがあります。1つは'/home/test/first/first.pdf'
、もう1つは'/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
フォルダーがあり、その中にfirst
とsecond
の2つのサブフォルダーがあり、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 のドキュメントを読む余裕がある場合に役立ちます。
この関数を使用して、絶対パスを含めずにディレクトリを圧縮します
import zipfile
import os
def zipDir(dirPath, zipPath):
zipf = zipfile.ZipFile(zipPath , mode='w')
lenDirPath = len(dirPath)
for root, _ , files in os.walk(dirPath):
for file in files:
filePath = os.path.join(root, file)
zipf.write(filePath , filePath[lenDirPath :] )
zipf.close()
#end zipDir
もっとエレガントなソリューションがあるかもしれませんが、これはうまくいくはずです:
def add_Zip_flat(Zip, filename):
dir, base_filename = os.path.split(filename)
os.chdir(dir)
Zip.write(base_filename)
Zip = zipfile.ZipFile(buffer, 'w')
add_Zip_flat(Zip, first_path)
add_Zip_flat(Zip, second_path)
Zip.close()