[PYTHON] Gzip compresser les données en streaming

Que veux-tu faire

Je voulais créer et renvoyer dynamiquement des données Gzip dans [Flask Streaming Contents].

code

Classe GzipStream (auto-fabriquée).

#!/usr/bin/env python
# encoding: utf-8

from gzip import GzipFile
from StringIO import StringIO


class GzipStream(object):
    
    def __init__(self):
        self._io = StringIO()
        self._gf = GzipFile(fileobj=self._io, mode='wb')
        self._pos = 0
    
    def push(self, content):
        '''
        push a part of content.
        '''
        assert not self._gf.closed
        self._gf.write(content)
        self._gf.flush()
    
    def pop(self):
        '''
        :return: A part of gzipped content, or "None" that means EOF.
        '''
        current_pos = self._io.len
        
        if self._gf.closed and current_pos == self._pos:
            return None
        
        part = self._io.getvalue()[self._pos:current_pos]
        self._pos = current_pos
        
        return part
    
    def close(self):
        '''
        you must call this.
        '''
        if not self._gf.closed:
            self._gf.close()
    
    def __enter__(self):
        '''Tu n'as pas à'''
        return self
    
    def __exit__(self, exc_type, exc_value, traceback):
        '''Tu n'as pas à'''
        self.close()

Essayez de l'utiliser comme suit.

>>> from streamgzip import GzipStream

>>> gs = GzipStream()

>>> gs.push('hello ')
>>> gs.pop()
'\x1f\x8b\x08\x00\xfd\xcf\x0cX\x02\xff\xcaH\xcd\xc9\xc9W\x00\x00\x00\x00\xff\xff'

>>> gs.push('world ')
>>> gs.push('!!')
>>> gs.pop()
'*\xcf/\xcaIQ\x00\x00\x00\x00\xff\xffRT\x04\x00\x00\x00\xff\xff'

>>> gs.close()
>>> gs.pop()
'\x03\x00\xb7\xc8\xd4%\x0e\x00\x00\x00'

>>> print gs.pop()
None

Essayez de vérifier que les données sont correctes.

>>> from gzip import GzipFile
>>> from StringIO import StringIO

>>> io = StringIO()
>>> io.write('\x1f\x8b\x08\x00\xfd\xcf\x0cX\x02\xff\xcaH\xcd\xc9\xc9W\x00\x00\x00\x00\xff\xff*\xcf/\xcaIQ\x00\x00\x00\x00\xff\xffRT\x04\x00\x00\x00\xff\xff\x03\x00\xb7\xc8\xd4%\x0e\x00\x00\x00')
>>> io.seek(0)
>>> gzfile = GzipFile(fileobj=io, mode='rb')
>>> gzfile.read()
'hello world !!'

Recommended Posts

Gzip compresser les données en streaming
Fractionner les données par seuil
Données de formation par CNN
Corrélation par prétraitement des données
Visualisons les données pluviométriques publiées par la préfecture de Shimane
Classer les données par la méthode k-means
Visualisation des données par préfecture
Données acquises par Django reliées
Ce que j'ai vu en analysant les données du marché des ingénieurs
Visualisons les données de niveau d'eau de la rivière publiées par la préfecture de Shimane
Exporter le contenu acquis par Twitter Streaming API au format JSON
[pepper] Transmettez toutes les données JSON obtenues par requête python à la tablette.
Le premier débutant en programmation à essayer une analyse de données simple avec programmation
Préparez un environnement d'analyse haute vitesse en accédant à mysql depuis l'environnement d'analyse de données
Première analyse de données satellitaires par Tellus
Démarrez la science des données dans le cloud
3 mois de données de décalage n mois de données de décalage
Comprendre Tensor (3): données du monde réel
Obtenez les données de graduation complètes pour bitflyer
Installez le fichier de données avec setup.py
Vérifiez le résumé des données dans CASTable
10 sélections d'extraction de données par pandas.DataFrame.query
Animation des géodonnées par geopandas
Sauvegardez les données vocales acquises par le navigateur au format wav sur le serveur
Jouons avec le jeu de données d'analyse d'entreprise "CoARiJ" créé par TIS ①
Prédiction des données en un clic pour le champ réalisée par apprentissage automatique entièrement automatique
Extraire et tracer les dernières données démographiques à partir des données PDF fournies par la ville
Jouons avec le jeu de données d'analyse d'entreprise "CoARiJ" créé par TIS ②