import re # Fonction pour calculer l'intervalle entre chaque profondeur def computeNbEtape (intervalle, valeur1, valeur2): return (valeur1 - valeur2) / intervalle # Fonction pour incrementer de nouvelles profondeurs def AjouterEtapes (ligneorigin, IntervalleCalc, nbEtape, valeurBase): for mesTicks in range(1, int(nbEtape)): maTempCalculee = valeurBase - mesTicks * IntervalleCalc ligneorigin.append(maTempCalculee) # Fonction pour extrapoler les temperatures manquantes par intervalle de 5cm def genereTemperature(lignetemperature, profondeurs, intervalle): mesTempResults = [] for index, temp in enumerate(lignetemperature): mesTempResults.append(temp) if index < (len(lignetemperature)-1): nbEtape = computeNbEtape(intervalle/100.0, profondeurs[index], profondeurs[index+1]) maDiffTemp = (lignetemperature[index] - lignetemperature[index+1]) AjouterEtapes(mesTempResults, maDiffTemp/nbEtape, nbEtape, lignetemperature[index]) return mesTempResults if __name__ == '__main__': # Recuperation des parametres # profondeurs en m profondeurs = [-0.25,-0.5,-1,-1.5,-2.5,-3.5,-4.5,-5.5,-6.5] espacement = input ("Entrer l'espacement desire (en cm) ") espacement = int(espacement) # Transformation de "espacement" en nombre entier fichierBrut = "D:\data\myfile\raw.txt" fichierEcrire = fichierBrut[:-4] + "_corrected" + ".txt" # Renommer le fichier en appondant '_corrected' # Ouverture et lecture des fichiers (source et destination) fichierLire = open(fichierBrut) mesLignes = fichierLire.readlines() fichierFinal = open(fichierEcrire, 'w') fichierFinal.write ("Fichier genere par format_data.py pour la mise en forme des donnees de temperature\n") # Calcul et ecriture des profondeurs incrementees mesprofgenerees = [] for index, maprofondeur in enumerate(profondeurs): mesprofgenerees.append(maprofondeur) if index < (len(profondeurs)-1): nbEtape = computeNbEtape(espacement/100.0, profondeurs[index], profondeurs[index+1]) maDiffProf = profondeurs[index] - profondeurs[index+1] AjouterEtapes(mesprofgenerees, maDiffProf / nbEtape, nbEtape, profondeurs[index]) fichierFinal.write("ID\t DATE HEURE\t") fichierFinal.write("\t".join(map(str, mesprofgenerees)) + "\n") print("Nombre de colonnes de base, ajoutees, total: {}, {}, {}".format(len(profondeurs), len(mesprofgenerees) + 2 - len(profondeurs), len(mesprofgenerees) + 2)) # Calcul et ecriture des temperatures incrementees for index,ligne in enumerate(mesLignes): #print ("Ligne: ", index, ligne) splitter = re.compile (r'\t') myligneitems = splitter.split(ligne) myTemperatureLigne = myligneitems[4:-6] # Les valeurs de temperatures commencent a l'index 2 myTemperatureLigne[:] = map(float, myTemperatureLigne) if (len(myTemperatureLigne) != len(profondeurs)): print ("Erreur: nombre de temperatures par ligne different de nombre de profondeurs! ({} / {})".format(len(myTemperatureLigne), len(profondeurs))) exit() malignegeneree = genereTemperature(myTemperatureLigne, profondeurs, espacement) fichierFinal.write("\t".join(myligneitems[:2]) + "\t") fichierFinal.write("\t".join(map(str,malignegeneree)) + "\n") print (len(mesLignes), "Lignes Traitees!") print ("Resultat stocke dans :", fichierEcrire) fichierLire.close() fichierFinal.close()