Python: extraire les données d'une chaine de texte structurée en fonction d'une liste d'index
Compatible Python2 & Python3
Exemple avec le contenu de la variable "d" organisée sous la forme d'un tableau
>>> print(d)
2015 0 391371 374179 765550
2014 1 403204 385442 788646
2013 2 405502 386831 792333
2005 10 426532 406488 833020
2004 11 423605 404592 828197
2003 12 421432 402484 823916
1929 86 97489 180249 277738
1928 87 86122 165344 251466
1927 88 72603 149288 221891
1919 96 6011 21172 27183
1918 97 3649 13644 17293
1917 98 2013 9475 11488
1916 99 1324 6313 7637
>>>
Chaque ligne contient exactement le même nombre de données.
Chaque donnée (de longueur fixe) se trouve exactement à la même place sur chaque ligne.
Dans l'exemple, chaque ligne contient donc 5 colonnes.
>>> print(columns)
['Année de naissance', 'Age révolu', "Nombre d'hommes", 'Nombre de femmes', 'Ensemble']
>>>
Les données de la première colonne commencent à l'index 0
Les données de la seconde colonne commencent à l'index 5
Les données de la troisième colonne commencent à l'index 8
Les données de la quatrième colonne commencent à l'index 15
Et enfin, les données de la cinquième colonne commencent à l'index 22
Et c'est pareil pour chaque ligne.
>>> print(i)
[0, 5, 8, 15, 22]
>>>
Une petite boucle va permettre d'extraire toutes les données en fonction de la liste d'index ci-dessus
>>> for line in d.split('\n'):
x = 0
for pos in i:
print("{COLUMN:>20s} : {DATA:<6s}".format(COLUMN=columns[x], DATA=line[pos:i[i.index(pos)+1] if i.index(pos)+1 < len(i) else None].strip()))
x += 1
print('*' * 31)
Année de naissance : 2015
Age révolu : 0
Nombre d'hommes : 391371
Nombre de femmes : 374179
Ensemble : 765550
*******************************
Année de naissance : 2014
Age révolu : 1
Nombre d'hommes : 403204
Nombre de femmes : 385442
Ensemble : 788646
*******************************
Année de naissance : 2013
Age révolu : 2
Nombre d'hommes : 405502
Nombre de femmes : 386831
Ensemble : 792333
*******************************
Année de naissance : 2005
Age révolu : 10
Nombre d'hommes : 426532
Nombre de femmes : 406488
Ensemble : 833020
*******************************
Année de naissance : 2004
Age révolu : 11
Nombre d'hommes : 423605
Nombre de femmes : 404592
Ensemble : 828197
*******************************
Année de naissance : 2003
Age révolu : 12
Nombre d'hommes : 421432
Nombre de femmes : 402484
Ensemble : 823916
*******************************
Année de naissance : 1929
Age révolu : 86
Nombre d'hommes : 97489
Nombre de femmes : 180249
Ensemble : 277738
*******************************
Année de naissance : 1928
Age révolu : 87
Nombre d'hommes : 86122
Nombre de femmes : 165344
Ensemble : 251466
*******************************
Année de naissance : 1927
Age révolu : 88
Nombre d'hommes : 72603
Nombre de femmes : 149288
Ensemble : 221891
*******************************
Année de naissance : 1919
Age révolu : 96
Nombre d'hommes : 6011
Nombre de femmes : 21172
Ensemble : 27183
*******************************
Année de naissance : 1918
Age révolu : 97
Nombre d'hommes : 3649
Nombre de femmes : 13644
Ensemble : 17293
*******************************
Année de naissance : 1917
Age révolu : 98
Nombre d'hommes : 2013
Nombre de femmes : 9475
Ensemble : 11488
*******************************
Année de naissance : 1916
Age révolu : 99
Nombre d'hommes : 1324
Nombre de femmes : 6313
Ensemble : 7637
*******************************
>>>
Ajouter un commentaire