Question gzip un fichier en Python


Je veux compresser un fichier en Python. J'essaie d'utiliser le subprocss.check_call (), mais il échoue constamment avec l'erreur 'OSError: [Errno 2] Pas un tel fichier ou répertoire'. Y a-t-il un problème avec ce que j'essaie ici? Y a-t-il un meilleur moyen de gziper un fichier que d'utiliser subprocess.check_call?

from subprocess import check_call

def gZipFile(fullFilePath)
    check_call('gzip ' + fullFilePath)

Merci!!


23
2017-11-16 18:25


origine


Réponses:


Essaye ça:

check_call(['gzip', fullFilePath])

Selon ce que vous faites avec les données de ces fichiers, le lien de Skirmantas vers http://docs.python.org/library/gzip.html peut aussi être utile. Notez les exemples au bas de la page. Si vous n'avez pas besoin d'accéder aux données ou que vous n'avez pas déjà les données dans votre code Python, l'exécution de gzip peut être la manière la plus propre de le faire, vous n'avez donc pas à gérer les données en Python.


13
2017-11-16 18:27



Il y a un module gzip. Usage:

Exemple de création d'un fichier GZIP compressé:

import gzip
content = "Lots of content here"
f = gzip.open('/home/joe/file.txt.gz', 'wb')
f.write(content)
f.close()

Exemple de compression GZIP d'un fichier existant:

import gzip
f_in = open('/home/joe/file.txt')
f_out = gzip.open('/home/joe/file.txt.gz', 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()

MODIFIER: 

La réponse de Jace Browning en utilisant with dans Python> = 2.7 est évidemment plus concis et lisible, donc mon deuxième extrait devrait (et devrait) ressembler à:

import gzip
with open('/home/joe/file.txt') as f_in, gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
    f_out.writelines(f_in)

48
2017-11-16 18:28



Au format Python 2.7:

import gzip

with open("path/to/file", 'rb') as orig_file:
    with gzip.open("path/to/file.gz", 'wb') as zipped_file:
        zipped_file.writelines(orig_file)

Encore plus court (Testé sur python 2.7.6)

with open('path/to/file') as src, gzip.open('path/to/file.gz', 'wb') as dst:        
    dst.writelines(src)

29
2017-07-17 14:10



Utilisez le gzip module:

import gzip
import os

in_file = "somefile.data"
in_data = open(in_file, "rb").read()
out_gz = "foo.gz"
gzf = gzip.open(out_gz, "wb")
gzf.write(in_data)
gzf.close()

# If you want to delete the original file after the gzip is done:
os.unlink(in_file)

Votre erreur: OSError: [Errno 2] No such file or directory' vous dit que le fichier fullFilePath n'existe pas. Si vous devez toujours suivre cette voie, assurez-vous que le fichier existe sur votre système et que vous utilisez un chemin absolu non relatif.


5
2017-11-16 18:31



la documentation à ce sujet est en fait incroyablement simple

Exemple de lecture d'un fichier compressé:

import gzip
f = gzip.open('file.txt.gz', 'rb')
file_content = f.read()
f.close()

Exemple de création d'un fichier GZIP compressé:

import gzip
content = "Lots of content here"
f = gzip.open('file.txt.gz', 'wb')
f.write(content)
f.close()

Exemple de compression GZIP d'un fichier existant:

import gzip
f_in = open('file.txt', 'rb')
f_out = gzip.open('file.txt.gz', 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()

https://docs.python.org/2/library/gzip.html

C'est toute la documentation. . .


3
2017-11-09 22:42



import gzip

def gzip_file(src_path, dst_path):
    with open(src_path, 'rb') as src, gzip.open(dst_path, 'wb') as dst:
        for chunk in iter(lambda: src.read(4096), b""):
            dst.write(chunk)

0
2018-06-29 15:56