Bonjour,
Apres 2 jours à tourner en rond , je me suis décidé à lancer ma première demande d'aide en ligne.
Je bute sur le parsing de fichiers xml qui contiennent une balise root avec un lien http
Extrait ci dessous:
Si j'enlève manuellement la chaine : xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec" dans la première balise, j'arrive très facilement à parser mon fichier et obtenir le résultat escompté. A savoir, obtenir une dataframe Pandas répertoriant l'ensemble des mesures.
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 <?xml version="1.0" encoding="UTF-8"?> <measCollecFile xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec"> <fileHeader vendorName="N........" fileFormatVersion="32.435 V10.0"> <fileSender elementType="MTW"/> <measCollec beginTime="2022-11-27T21:45:00+01:00"/> </fileHeader> <measData> <managedElement/> <measInfo measInfoId="MTW"> <granPeriod endTime="2022-11-27T22:00:00+01:00" duration="PT900S"/> <repPeriod duration="PT900S"/> <measTypes>M1 M2 M3 M4 M5</measTypes> <measValue measObjLdn="N-147/MT-99/MTW-1"> <measResults>2737 2833 2703 2247 0</measResults> </measValue> </measInfo>
mon code est construit de cette façon
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 measObjLdn measResult granPeriod time 0 N-147/MT-99/MTW-1 2798 2846 2770 1497 0 PT900S 2022-11-27T22:45:00+01:00
Malheureusement, il ne fonctionne pas si j'utilise le fichier originel avec la balise root complète. Avez vous une idée pour que je puisse adapter mon code afin de prendre en compte cette balise ?
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 from lxml import etree import xml.etree.ElementTree as ET import pandas patch_sortie= 'C:\\Users\\Documents\\Python Scripts\\recherche file\\sortie\\' tree = ET.parse(patch_sortie+'1.xml') tree1 = etree.parse(patch_sortie+'1.xml') root = tree.getroot() liste_measObjLdn = [] liste_measResults = [] liste_repPeriod = [] liste_time = [] for dn in tree1.xpath("/measCollecFile/measData/measInfo/measValue"): liste_measObjLdn.append(dn.get("measObjLdn")) for c in root.iter('measResults'): liste_measResults.append(c.text) for pts in tree1.xpath("/measCollecFile/measData/measInfo/granPeriod"): liste_repPeriod.append(pts.get("duration")) for time in tree1.xpath("/measCollecFile/measData/measInfo/granPeriod"): liste_time.append(time.get("endTime")) result = pandas.DataFrame(columns=['measObjLdn','measResult','granPeriod']) df=result.assign(measObjLdn=liste_measObjLdn,measResult=liste_measResults,granPeriod=liste_repPeriod,time=liste_time) print (df)
Si je n'avais qu'un fichier qu'à parser , cela ne me bloquerait dans la suite de l'exercice, mais j'en ai plus d'une soixantaine à traiter et chaque fichier comporte au moins 200 équipements que je dois ajouter dans ma dataframe
merci pour votre aide
Partager