Python: Créer un streaming gzip avais de fichiers?

Je suis à essayer de comprendre la meilleure façon de compresser un flux de données avec Python zlib.

J'ai un fichier-comme les flux d'entrée (input, ci-dessous) et une sortie de la fonction qui accepte un fichier de type (output_function, ci-dessous):

with open("file") as input:
    output_function(input)

Et j'aimerais gzip compresse input morceaux avant de les envoyer à output_function:

with open("file") as input:
    output_function(gzip_stream(input))

Il ressemble à la gzip module suppose que l'entrée ou la sortie sera un gzip avais fichier sur le disque... Donc je suppose que le zlib module est ce que je veux.

Cependant, il n'est pas nativement offre un moyen simple de créer un fichier de flux-like... Et le flux de compression, il n'soutien vient de la façon d'ajouter manuellement des données à une compression de la mémoire tampon, puis rinçage de la mémoire tampon.

Bien sûr, je pourrais écrire un wrapper autour de zlib.Compress.compress et zlib.Compress.flush (Compress est retourné par zlib.compressobj()), mais je serais inquiet au sujet d'obtenir des tailles de mémoire tampon de mal, ou quelque chose de similaire.

Alors, quelle est la façon la plus simple de créer un streaming, gzip compression de fichiers avec Python?

Modifier: Pour clarifier, les flux d'entrée et de la compression de flux de sortie sont à la fois trop grand pour tenir dans la mémoire, donc quelque chose comme output_function(StringIO(zlib.compress(input.read()))) n'a pas vraiment résoudre le problème.

  • J'ai trouvé une mise en œuvre de l ' autre chose - un fichier comme décompresser un gzip avais flux à effbot: effbot.org/librarybook/zlib.htm ... Mais je suis à la recherche pour le contraire (bien que je suppose qu'il pourrait être utile si j'ai besoin d'écrire mon propre)