Bonjour à tous !
Ca fait un moment que j'utilise Python pour répondre à mes besoins mais je n'en reste pas moins assez médiocre. J'ai finalement décidé de venir vous demander un petit coup de main parceque la ça fait un moment que je bute et il faut que j'avance un peu.
Je vous explique mon problème.
J'ai un fichier .txt contenant des mesures et à la suite de ces mesures l'année, le mois, le jour, l'heure, la minute et la seconde à laquelle la mesure a été prise. Voici les premières lignes pour que vous compreniez :
1;101.8183;98.534;7.2393;2016; 03; 22; 17; 55; 04
1;301.8175;301.4767;7.2393;2016; 03; 22; 17; 55; 26
2;286.6108;98.188;5.1269;2016; 03; 22; 17; 55; 47
2;86.6099;301.8215;5.1266;2016; 03; 22; 17; 56; 08
3;116.2481;99.8247;51.7612;2016; 03; 22; 17; 56; 29
3;316.2474;300.1744;51.761;2016; 03; 22; 17; 56; 52
1;101.8188;98.534;7.2392;2016; 03; 22; 18; 00; 07
1;301.8173;301.4768;7.2394;2016; 03; 22; 18; 00; 29
2;286.6112;98.188;5.1268;2016; 03; 22; 18; 00; 52
2;86.6095;301.8217;5.1266;2016; 03; 22; 18; 01; 15
3;116.2484;99.824;51.7612;2016; 03; 22; 18; 01; 36
3;316.2479;300.1755;51.761;2016; 03; 22; 18; 01; 59
1;101.8182;98.5329;7.2393;2016; 03; 22; 18; 05; 06
...
Mon objectif est de découper ce fichier en plusieurs par tranche de x minutes : le code regarde à quelle heure la première mesure a été faite, écrit cette ligne et les 5 suivantes dans un fichier .txt puis il regarde l'heure de la mesure à la ligne d'indice 5, si cette mesure a été faite après plus de x minutes il crée un nouveau fichier .txt contenant cette mesure et les 5 suivantes sinon il complète le dernier fichier créé et ainsi de suite.
Alors comme je suis assez naze en Python (enfin en programmation tout court, j'ai pas la logique) j'ai fait un code assez basique. D'abord je définis une fonction doy_h : elle calcule le jour Julien (numéro du jour de l'année) auquel j'ajoute l'heure décimal : heure /24 + minute / 60 /24 + secondes / 3600 /24. C'est ce qui me sert de repère.
J'arrive à créer un premier fichier .txt, puis à le compléter avec les données suivantes le problème c'est qu'au bout d'un moment ça plante parceque j'utilise une vilaine magouille pour ouvrir le dernier .txt créé, j'utilise des indices. Enfin le mieux c'est que je vous montre mon code :
En fait, je pense que j'arriverai à m'en sortir si je trouvais une façon simple d'ouvrir le dernier fichier créé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 import numpy as np import datetime mesures_tache = 'C:/Desktop/Decoupage des donnees/mesures_tache/TEST0820.16m' # Fonction doy_h def doy_h_f(annee,mois,jour,heure,minute,seconde) : heure_deci = heure/24 + (minute/60)/24 + (seconde/3600)/24 doy_h = int(datetime.datetime.strptime(str(annee + ' ' + mois + ' ' + jour), '%Y %m %d').timetuple().tm_yday) + heure_deci return doy_h # Fonction de découpage def decoupage(mesures_tache): intervalle = int(input("Quelle est l'intervalle de découpage des données souhaitées (en minutes) ? ")) intervalle_d = (intervalle/60)/24 nbr_pts = int(input("Quel est le nombre de points mesurés ? ")) with open(mesures_tache, 'r') as f : for ligne in f : ligne = f.readlines() i = 0 ligne_init = ligne[0].split(";") doy_init_h = doy_h_f(str(int(ligne_init[4])),str(int(ligne_init[5])),str(int(ligne_init[6])),int((ligne_init[7])),int((ligne_init[8])),int((ligne_init[9]))) while i < len (ligne) : ligne_1 = ligne[i].split(";") doy_h = doy_h_f(str(int(ligne_1[4])),str(int(ligne_1[5])),str(int(ligne_1[6])),int((ligne_1[7])),int((ligne_1[8])),int((ligne_1[9]))) NomFichier = "donnees_tache_" + str(i) + ".txt" Fichier = open(NomFichier,'w') Fichier.close() if doy_h - doy_init_h > intervalle_d : NomFichier = "donnees_tache_" + str(i) + ".txt" Fichier = open(NomFichier,'w') Fichier.write(ligne[i]+'\n'+ligne[i+1]+'\n'+ligne[i+2]+'\n'+ligne[i+3]+'\n'+ligne[i+4]+'\n'+ligne[i+5]+'\n') Fichier.close() doy_init_h = doy_h else : i=i-nbr_pts*2 if i < 0 : i=0 Fichier = open("donnees_tache_" + str(i)+ ".txt",'a') Fichier.write(ligne[i]+'\n'+ligne[i+1]+'\n'+ligne[i+2]+'\n'+ligne[i+3]+'\n'+ligne[i+4]+'\n'+ligne[i+5]+'\n') Fichier.close() else : i=i Fichier = open("donnees_tache_" + str(i) + ".txt",'a') i+= nbr_pts*2 Fichier.write(ligne[i]+'\n'+ligne[i+1]+'\n'+ligne[i+2]+'\n'+ligne[i+3]+'\n'+ligne[i+4]+'\n'+ligne[i+5]+'\n') Fichier.close() i+= nbr_pts*2
Quelqu'un aurait une idée ?
Si je n'ai pas été clair, n'hésitez pas à me le dire, ça fait un moment que je bloque sur ce codeEt désolé pour ma programmation qui doit paraître bien archaïque à certains
D'avance, merci !
Partager