J'ai deux fichiers dans deux répertoires différents, l'un est '/home/test/first/first.pdf'
, l'autre est '/home/text/second/second.pdf'
. J'utilise le code suivant pour les compresser:
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()
Après avoir ouvert le fichier Zip que j'ai créé, j'ai un dossier home
dedans, puis il y a deux sous-dossiers dedans, first
et second
, puis le pdf des dossiers. Je ne sais pas comment inclure seulement deux fichiers pdf au lieu d'avoir zippé le chemin complet dans l'archive Zip. J'espère avoir clarifié ma question, aidez-moi. Merci.
La méthode zipfile write () prend en charge un argument supplémentaire (arcname) qui est le nom de l'archive à stocker dans le fichier Zip, vous n'aurez donc qu'à modifier votre code avec:
from os.path import basename
...
Zip.write(first_path, basename(first_path))
Zip.write(second_path, basename(second_path))
Zip.close()
Lorsque vous aurez du temps libre, la lecture de la documentation pour zipfile sera utile.
J'utilise cette fonction pour compresser un répertoire sans inclure le chemin absolu
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
Je soupçonne qu'il pourrait y avoir une solution plus élégante, mais celle-ci devrait fonctionner:
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()