#1 Le 25/07/2021, à 09:45
- migrec
Traitement d'un fichier texte sur plusieurs lignes
Bonjour,
J'ai un fichier texte contenant des données dont j'aimerai récupérer le contenu sous forme de tableau (csv ira très bien).
Le fichier initial est de la forme (en simplifiant) :
blabla
encoredublabla
toujoursdublabla
Personne1
BlablaConcernantCettePersonne
Item1 : DonnéeItem1Personne1
Item2 : DonnéeItem2Personne1
BlablaGlobal
Personne2
BlablaConcernantCettePersonne
Item1 : DonnéeItem1Personne2
Item2 : DonnéeItem2Personne2
BlablaGlobal
Je voudrai avoir
Nom;Item1;Item2;Item3
Personne1;DonnéeItem1Personne1;DonnéeItem2Personne1;;
Personne2;DonnéeItem1Personne2;DonnéeItem2Personne2;;
Avec sed et awk, je me débrouille pour gérer les données en ligne mais quelle est la meilleure solution pour un fichier dont les données sont réparties sur plusieurs lignes ?
Hors ligne
#2 Le 25/07/2021, à 10:06
- Watael
Re : Traitement d'un fichier texte sur plusieurs lignes
salut,
d'où viennent ces données non structurées (ou si peu) ?
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#3 Le 25/07/2021, à 10:10
- diesel
Re : Traitement d'un fichier texte sur plusieurs lignes
salut,
d'où viennent ces données non structurées (ou si peu) ?
T'es d'la police ?
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#4 Le 25/07/2021, à 10:14
- migrec
Re : Traitement d'un fichier texte sur plusieurs lignes
Les données viennent d'un fichier PDF qui m'affiche le récapitulatif des données avec une personne par page.
Et je cherche à constituer un tableau global pour y effectuer quelques calculs.
Hors ligne
#5 Le 25/07/2021, à 10:15
- migrec
Re : Traitement d'un fichier texte sur plusieurs lignes
Avec une macro LibreOffice, ça devrait le faire mais ça fait longtemps que j'ai pas mis les mains dedans.
Hors ligne
#6 Le 25/07/2021, à 10:17
- Watael
Re : Traitement d'un fichier texte sur plusieurs lignes
T'es d'la police ?
oui. je suis sérif.
la question est plutôt "comment ont été acquises* ces données ?"
--
* non, je ne suis pas inspecteur des impôts.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#7 Le 25/07/2021, à 10:21
- Watael
Re : Traitement d'un fichier texte sur plusieurs lignes
'un fichier PDF qui m'affiche le récapitulatif des données avec une personne par page.
est-ce que ce ne serait pas plus simple de splitter le fichier en fichiers d'une page ?
l'idéal serait d'avoir chaque page dans un format balisé (avec pdftohtml), pour pouvoir se repérer...
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#8 Le 25/07/2021, à 14:54
- serge-martial-1956//
Re : Traitement d'un fichier texte sur plusieurs lignes
Bonjour tout le monde.
Perso je ne sais pas encore vraiment bien si je dois interrompre les discutions auxquelles je ne comprends pas grand chose. Beaucoup de mots. Tous ces mots . . . Je les retrouve dans man ? J'ai tenté de m'inscrire sur un dictionnaire informatique ; mais il me demande d'accepter les cookies, je me rappelle plus du nom, je vais revoir ça avec méfiance. Si vous pouvez dire quelque chose de positif. Merci.
Hors ligne
#9 Le 25/07/2021, à 15:38
- Watael
Re : Traitement d'un fichier texte sur plusieurs lignes
[dois-je] interrompre les discutions auxquelles je ne comprends pas grand chose
non. surtout pas pour demander si tu peux.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#10 Le 25/07/2021, à 20:04
- pingouinux
Re : Traitement d'un fichier texte sur plusieurs lignes
Bonsoir,
Avec sed et awk, je me débrouille pour gérer les données en ligne mais quelle est la meilleure solution pour un fichier dont les données sont réparties sur plusieurs lignes ?
Tu peux utiliser python, qui est bien adapté pour ça.
En supposant que j'aie bien compris la structure du fichier de données :
$ cat script_python.py
#!/usr/bin/env python3
import sys, re
rec=re.compile('(.*\n)*?(.*\n)(.*\n)(Item1 : .*\n)(Item2 : .*\n)?(Item3 : .*\n)?')
with open(sys.argv[1],'r') as f : lst=rec.findall(f.read())
print("Nom;Item1;Item2;Item3")
for k in lst: print("%s;%s;%s;%s;"%(k[1][:-1],k[3][8:-1],k[4][8:-1],k[5][8:-1]))
À appeler ainsi :
$ ./script_python.py ton_fichier
Nom;Item1;Item2;Item3
Personne1;DonnéeItem1Personne1;DonnéeItem2Personne1;;
Personne2;DonnéeItem1Personne2;DonnéeItem2Personne2;;
Si ça ne marche pas pour certains fichiers, il faut que tu en précises la structure.
Édité : Simplification
Dernière modification par pingouinux (Le 26/07/2021, à 09:50)
Hors ligne
#11 Le 26/07/2021, à 15:48
- migrec
Re : Traitement d'un fichier texte sur plusieurs lignes
Merci pour ce script qui aura au moins l'avantage de me mettre le pied à l'étrier concernant python, que je ne connais quasiment pas !
Hors ligne