previous : Advanced use up : Site documentation next : Glossary

Data processing

Les flux de ressources peuvent être associés à des scripts de traitement de données. Ces scripts peuvent être de deux types :

  • validation, ou
  • transformation.

Dans les deux cas, un script implémenté par un fichier de code Python dont l'interface est la suivante :

  • Un script prend en paramètre le chemin du fichier à traiter (c'est-à-dire à valider ou à transformer), ce chemin lui étant passé automatiquement par le gestionnaire de processus.
  • Un script se termine avec un code de retour nul si le traitement n'a pas généré d'erreur et non-nul dans le cas contraire.
  • Toute information renvoyée sur la sortie d'erreur sera capturé par l'interface et exposé à l'utilisateur.

Les scripts de validation ne sont pas sensé généré d'information sur la sortie standard, seul le code de retour est pertinent pour valider ou non un fichier d'entrée.

Les scripts de transformation produisent le résultat de leur traitement (c'est-à-dire la transformation) directement dans la sortie standard. Ce flux est ensuite récupéré dans l'interface pour produire un fichier résultant de la transformation, si cette dernière s'est déroulée avec succès (c'est-à-dire que le code de retour du script est nul).

Exemple de script de validation

Le fichier suivant vérifie que toutes les lignes d'un fichier CSV ont le même nombre de colonne.

ReST / HTML errors:System Message: WARNING/2 (&lt;string&gt; , line 34)</p>

Cannot analyze code. Pygments package not found.

.. code-block:: python

    def check_column_number(infile):
        """Check that all columns of a CSV file have the same number of columns.
        """
        firstline = next(infile)
        ncols = len(firstline.split(','))
        for line in infile:
            if len(line.split(',')) != ncols:
                raise ValueError('{0} does not have {1} columns'.format(
                    line, ncols))


    if __name__ == '__main__':
        import sys
        fpath = sys.argv[1]
        with open(fpath) as infile:
            check_column_number(infile)


Ce script va lever une exception (de type ValueError) si toutes lignes du fichier passé en paramètre n'ont pas le même nombre de colonnes ; cette exception n'étant pas interceptée, le code de retour du programme sera non nul.

Exemple de script de transformation

Le fichier suivant transforme un fichier encodé en latin1 en UTF-8.

ReST / HTML errors:System Message: WARNING/2 (&lt;string&gt; , line 64)</p>

Cannot analyze code. Pygments package not found.

.. code-block:: python

    def iconv(infile, outfile, from_encoding='latin1', to_encoding='utf-8'):
        for line in infile:
            outfile.write(line.decode(from_encoding).encode(to_encoding))


    if __name__ == '__main__':
        import sys
        fpath = sys.argv[1]
        with open(fpath) as infile:
            iconv(infile, sys.stdout, from_encoding='latin1', to_encoding='utf-8')

Ce script écrit dans sys.stdout, la sortie standard en Python.

previous : Advanced use up : Site documentation next : Glossary