web-dev-qa-db-fra.com

Zip fichier unique

J'essaie de compresser un seul fichier en python. Pour une raison quelconque, j'ai du mal à descendre la syntaxe. Ce que j'essaie de faire, c'est de conserver le fichier d'origine et de créer un nouveau fichier zippé de l'original (comme ce qu'un Mac ou Windows ferait si vous archivez un fichier).

Voici ce que j'ai jusqu'à présent:

import zipfile

myfilepath = '/tmp/%s' % self.file_name
myzippath = myfilepath.replace('.xml', '.Zip')

zipfile.ZipFile(myzippath, 'w').write(open(myfilepath).read()) # does not Zip the file properly
9
David542

La bonne façon de compresser un fichier Zip est:

zipfile.ZipFile('hello.Zip', mode='w').write("hello.csv")
# assume your xxx.py under the same dir with hello.csv

Le document officiel python dit :

ZipFile.write(filename, arcname=None, compress_type=None)

Écrivez le fichier nommé nom de fichier dans l'archive, en lui donnant le nom de l'archive nom d'arc

Vous passez open(filename).read() dans write(). open(filename).read() est une chaîne unique qui contient tout le contenu du fichier filename, elle lancerait FileNotFoundError car elle essaie de trouver un fichier nommé avec le contenu de la chaîne.

9
Haifeng Zhang

Si le fichier à compresser (filename) se trouve dans un répertoire différent appelé pathname, vous devez utiliser le paramètre arcname. Sinon, il recréera la hiérarchie complète des dossiers dans le dossier de fichiers.

from zipfile import ZipFile
import os

with ZipFile(Zip_file, 'w') as zipf:
    zipf.write(os.path.join(pathname,filename), arcname=filename)
9
nbeuchat

Puisque vous souhaitez également spécifier le répertoire, essayez d'utiliser os.chdir:

#!/usr/bin/python

from zipfile import ZipFile
import os

os.chdir('/path/of/target/and/destination')
ZipFile('archive.Zip', 'w').write('original_file.txt')
3
l'L'l

Essayez d'appeler zipfile.close () après?

   from zipfile import ZipFile
   zipf = ZipFile("main.Zip","w", zipfile.Zip_DEFLATED)
   zipf.write("main.json")

   zipf.close()
2
ndsilva