Code source de pyspc.model.premhyce.observation

#!/usr/bin/python3
# -*- coding: utf-8 -*-
########################################################################
#
# This file is part of python module <pyspc>.
# Copyright (C) 2013-2021  R. Marty
#   (renaud.marty@developpement-durable.gouv.fr)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program (see COPYING.txt).
# If not, see <http://www.gnu.org/licenses/>.
#
########################################################################
"""
Modélisations hydrologiques - Projet PREMHYCE - Données observées
"""
from datetime import datetime as dt
import os.path
import pandas as pnd
import pyspc.core.exception as _exception

DATE_FORMAT = '%Y%m%d'
"""Format des dates dans les fichiers d'observation PREMHYCE"""


def date_parser(txt):
    """Conversion de date"""
    return dt.strptime(txt, DATE_FORMAT)


[docs] class Data(): """ Structure de données QMJ pour PREMHYCE Attributes ---------- filename : str Nom du fichier de données PREMHYCE """
[docs] def __init__(self, filename=None): """ Initialisation de l'instance de la classe Data (projet Premhyce) Parameters ---------- filename : str Nom du fichier de données PREMHYCE """ self.filename = filename
def __str__(self): """ Afficher les méta-données de l'instance Data (projet Premhyce) """ text = """ ************************************* ********* PREMHYCE - Data *********** ************************************* * NOM FICHIER = {filename} ************************************* """ return text.format(**vars(self))
[docs] def read(self): """ Lecture d'un fichier d'observations QMJ de PREMHYCE Returns ------- pandas.DataFrame Tableau des données d'observations QMJ de PREMHYCE Examples -------- >>> import pyspc.model.premhyce as _model >>> f = 'data/model/premhyce/Debits.txt' >>> d = _model.Data(filename=f) >>> print(d) ************************************* ********* PREMHYCE - Data *********** ************************************* * NOM FICHIER = data/model/premhyce/Debits.txt * NOM VARIABLE SPC = QJ ************************************* >>> df = d.read() >>> df TYP CODE DATE DEBIT(l/s) 0 DEB K0253030 2020-06-09 1070 1 DEB K0260020 2020-06-09 4340 2 DEB K0253030 2020-06-10 984 3 DEB K0260020 2020-06-10 5220 4 DEB K0253030 2020-06-11 919 5 DEB K0260020 2020-06-11 5220 6 DEB K0253030 2020-06-12 53500 7 DEB K0260020 2020-06-12 207000 8 DEB K0253030 2020-06-13 37800 9 DEB K0260020 2020-06-13 219000 10 DEB K0253030 2020-06-14 13300 11 DEB K0260020 2020-06-14 86800 """ return pnd.read_csv( self.filename, sep=';', index_col=False, engine='python', skipfooter=1, converters={'DATE': date_parser}, )
[docs] def write(self, data=None, dirname='.'): """ Ecrire le fichier de données QMJ de PREMHYCE Parameters ---------- data : pandas.DataFrame Tableau des données d'observations QMJ de PREMHYCE dirname : str Répertoire du fichier d'observations QMJ de PREMHYCE """ _exception.raise_valueerror( not isinstance(data, pnd.DataFrame), 'Les données doivent être contenues dans un pnd.DataFrame' ) if self.filename is None: self.filename = 'Debits.txt' self.filename = os.path.join(dirname, self.filename) with open(self.filename, 'w', encoding='utf-8', newline='\r\n') as f: f.write('TYP;CODE;DATE;DEBIT(l/s)\n') data['_'] = '' # car lineterminator=';\r\n' non accepté data.to_csv( self.filename, mode='a', sep=';', header=False, index=False, date_format=DATE_FORMAT, lineterminator='\r\n' ) with open(self.filename, 'a', encoding='utf-8', newline='\r\n') as f: f.write('FIN;OBS;')