Lire un fichier prn avec python
Résolu/Fermé
bibimul
Messages postés
30
Date d'inscription
mercredi 6 décembre 2017
Statut
Membre
Dernière intervention
18 mars 2022
-
2 oct. 2020 à 13:40
bibimul Messages postés 30 Date d'inscription mercredi 6 décembre 2017 Statut Membre Dernière intervention 18 mars 2022 - 9 oct. 2020 à 13:12
bibimul Messages postés 30 Date d'inscription mercredi 6 décembre 2017 Statut Membre Dernière intervention 18 mars 2022 - 9 oct. 2020 à 13:12
A voir également:
- Python prn
- Citizen code python avis - Accueil - Outils
- Python retour à la ligne dans le code - Forum Python
- Trouver la position d'un élément dans une liste python ✓ - Forum Python
- Python generator - Télécharger - Sécurité
8 réponses
jee pee
Messages postés
40751
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
4 février 2025
9 518
2 oct. 2020 à 15:58
2 oct. 2020 à 15:58
Bonjour,
Juste quelques observations. Ton fichier .PRN il contient juste du texte, donc lisible par un éditeur ou c'est plutôt du binaire avec les séquences PostScript destinées à l'imprimante pour le formatage de l'état ?
Car dans le 1er cas, les bibliothèques pour fichier texte de python devrait suffire, après à toi de de localiser les données que tu cherches dans les enregistrements.
Dans le second, il faudrait une bibliothèque spécialisée. Et si on semble en trouver comme : https://pypi.org/project/cutplace/ je pense que c'est juste destiné à un fichier texte formaté.
Juste quelques observations. Ton fichier .PRN il contient juste du texte, donc lisible par un éditeur ou c'est plutôt du binaire avec les séquences PostScript destinées à l'imprimante pour le formatage de l'état ?
Car dans le 1er cas, les bibliothèques pour fichier texte de python devrait suffire, après à toi de de localiser les données que tu cherches dans les enregistrements.
Dans le second, il faudrait une bibliothèque spécialisée. Et si on semble en trouver comme : https://pypi.org/project/cutplace/ je pense que c'est juste destiné à un fichier texte formaté.
bibimul
Messages postés
30
Date d'inscription
mercredi 6 décembre 2017
Statut
Membre
Dernière intervention
18 mars 2022
2 oct. 2020 à 16:01
2 oct. 2020 à 16:01
Alors il s'agit uniquement du premier choix.
J'ai du texte et des nombres donc normalement facilement lisible par python mais quand je l'ouvre il me dit que ".prn" il ne reconnait pas
J'ai du texte et des nombres donc normalement facilement lisible par python mais quand je l'ouvre il me dit que ".prn" il ne reconnait pas
jee pee
Messages postés
40751
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
4 février 2025
9 518
2 oct. 2020 à 16:16
2 oct. 2020 à 16:16
et en tout simplement renommant avant le fichier en .txt
bibimul
Messages postés
30
Date d'inscription
mercredi 6 décembre 2017
Statut
Membre
Dernière intervention
18 mars 2022
8 oct. 2020 à 11:41
8 oct. 2020 à 11:41
Ok ça fonctionne super bien merci.
Maintenant j'ai un autre soucis :
dans ce fichier texte j'aimerais en récupérer seulement une partie et créer un tableau à partie de ce texte. Mon texte se comporte comme dans l'exemple ci-dessous :
Imaginons maintenant que j'aimerais récupérer la partie du texte où j'ai des points avec Y, X, H, DY, DX, etc... et que j'aimerais en faire un tableau comment est-ce que je pourrais faire ça?
Merci d'avance pour la réponse
Maintenant j'ai un autre soucis :
dans ce fichier texte j'aimerais en récupérer seulement une partie et créer un tableau à partie de ce texte. Mon texte se comporte comme dans l'exemple ci-dessous :
63319034 V 592.6382 ------------------------- 122 63300011 V -1.244 0. 3.6 36. 31 0.2 24.062 -3.2869 0.000 0.000 0 123 63300008 V -1.313 -2. 4.6 54. 32 -0.6 72.271 -1.1564 0.000 0.000 0 124 63300012 V -1.318 0. 4.6 0. INFINI INDETERM 72.271 -1.1608 0.000 0.000 0 125 63300013 V -0.913 0. 3.6 0. INFINI INDETERM 11.366 -5.1000 0.000 0.000 0 126 63300014 V -0.750 0. 3.7 0. INFINI INDETERM 32.834 -1.4543 0.000 0.000 0 127 63300015 V -1.430 0. 3.8 28. 37 -0.1 38.171 -2.3838 0.000 0.000 0 63429005 V 592.1965 ------------------------- 128 V17901009 0.428 2. 3.8 76. 23 0.5 39.389 0.6914 0.000 0.000 0 129 V17901006 -0.148 2. 3.6 72. 22 0.8 20.630 -0.4570 0.000 0.000 0 130 V17901008 -0.334 -7. 4.2 80. 24 -1.8 56.743 -0.3750 0.000 0.000 0 131 V17901003 0.057 1. 4.2 80. 24 0.3 56.748 0.0642 0.000 0.000 0 132 63400008 V -0.066 0. 0. 3.5 50. 26 -0.1 62.812 -0.0671 0.000 0.000 0 133 0.066 0. 3.5 50. 26 -0.1 62.812 0.0670 0.000 0.000 0 134 63300015 V -0.989 0. 4.1 33. 37 0.1 54.943 -1.1459 0.000 0.000 0 63400008 V 592.1304 ------------------------- 135 63400013 V -0.406 0. 3.7 0. INFINI INDETERM 32.948 -0.7849 0.000 0.000 0 63429011 V 592.0724 ------------------------- 136 V17925002 -0.695 -2. 3.6 67. 23 -0.6 23.828 -1.8554 0.000 0.000 0 137 V17925004 -0.978 1. 6.3 89. 34 0.1 128.795 -0.4840 0.000 0.000 0 138 V17901010 -0.136 0. 3.9 72. 24 0.1 43.462 -0.1993 0.000 0.000 0 139 63300001 V -1.038 1. 3.7 49. 27 0.2 27.383 -2.4115 0.000 0.000 0 140 63300002 V -0.972 1. 4.5 58. 30 0.2 70.266 -0.8807 0.000 0.000 0 141 63300003 V -0.693 0. 4.8 53. 34 0.1 81.168 -0.5438 0.000 0.000 0 STATISTIQUE *********** 6 WI > 3.5, VALEUR MAXIMUM INDET SUR OBSERVATION NUMERO 116 LIMITE DETECT.D'ERREURS: 5.1, ERREUR 2E TYPE 5.0 % sigeom sa TITRE: 00634_calc Calcul PFP3 complémentaire LE 30.04.2020 14:04 PROGR. DE TRIANGULATION LTOP VERS.: 2011.1.3 - PC(LF-8000) OPT: MENS. PTS FIXES 4.ORD. PAGE 2 ------------------------------------------------------------------------------------------------------------ COORD. ET ALT. ,PTS VARIABLES AVEC ACCROISSEMENTS ET ELLIPSES D' ERREUR MOYENNES PAYS : CH ************************************************************************************** POINT TYPE Y X H DY DX DH EMA EMB GISA EMH ELEM.MES. M M M MM MM MM MM MM G MM PLAN. ALT. NULLBERN 2600000.000 1200000.000 0.000 0 0 V54310891 2585612.490 1226061.961 592.047 0 0 V54310899 2585555.689 1226044.755 591.889 0 0 V17925004 2585600.374 1226008.447 591.095 4 2 V17901010 2585553.571 1225936.862 591.937 4 2 V47269014 2585571.217 1225929.044 590.547 2 1 63319031 2585548.362 1225921.639 592.103 0.7 -0.7 -0.7 0.6 0.6 -79.7 0.8 16 8 63319032 2585507.662 1225848.093 592.106 3.1 -1.1 -0.3 1.3 0.9 -73.7 1.1 22 11 63300001 2585514.154 1225879.283 591.035 2.4 -0.9 -0.5 1.1 1.0 -60.4 1.3 6 3 63300002 2585494.036 1225840.294 591.101 2.9 -1.7 -0.5 1.4 1.0 -64.9 1.4 6 3 63300003 2585501.138 1225823.828 591.380 3.3 -1.3 -0.5 1.7 1.2 -74.1 1.6 4 2 63319033 2585453.128 1225759.198 591.844 6.1 -2.4 -0.1 3.1 1.1 -69.4 1.4 24 12 63300004 2585473.964 1225801.190 591.219 5.4 -2.0 -0.1 2.3 1.4 -68.2 1.8 4 2 63300005 2585457.843 1225770.403 591.602 5.8 -2.4 -0.2 3.0 1.4 -68.3 1.8 4 2 63300006 2585460.499 1225743.679 592.554 6.2 -2.8 -0.5 3.4 1.4 -74.8 1.9 4 2 63300009 2585484.842 1225744.568 592.925 6.3 -2.2 -0.2 3.5 1.7 -86.8 2.2 2 1 63300010 2585503.340 1225762.672 591.331 6.1 -2.2 0.0 3.1 1.8 -95.5 2.3 2 1 63300007 2585498.273 1225789.909 591.298 5.3 -1.7 -0.1 2.4 1.4 -86.0 1.8 4 2 63319034 2585462.558 1225842.649 592.638 8.4 -3.5 -0.2 1.8 1.4 -46.4 1.6 16 8 63300011 2585463.098 1225818.593 591.395 6.9 -3.1 0.0 2.2 1.5 -55.7 1.9 4 2 63300008 2585457.487 1225770.556 591.324 6.0 -2.8 0.6 3.1 1.5 -70.4 1.9 4 2 63300012 2585457.489 1225770.556 591.321 6.6 -3.4 -0.2 3.4 1.9 -73.1 2.6 2 1 63300013 2585473.353 1225846.207 591.726 8.5 -3.7 -0.1 2.1 1.9 -70.2 2.3 2 1 63300014 2585457.076 1225810.276 591.888 7.6 -3.4 -0.1 2.6 1.9 -54.5 2.3 2 1 63300015 2585483.177 1225874.772 591.208 10.8 -5.1 -0.5 1.6 1.3 -86.7 1.6 4 2 V55580209 2585618.945 1226144.049 592.098 0 0 44810007 2585638.778 1226214.746 592.127 0 0 V56375004 2585642.490 1226204.652 594.054 0 0 V55580207 2585608.012 1226098.425 592.986 0 0 44810508 2585610.485 1226135.258 592.310 0 0 V54310895 2585595.740 1226067.679 592.132 0 0 V54310897 2585590.899 1226064.707 591.925 0 0 V17901001 2585525.015 1226008.855 591.475 0 0 V17901003 2585511.303 1225981.913 592.255 2 1 V17901009 2585521.216 1225953.420 592.626 2 1 V17901008 2585457.946 1225882.520 591.856 2 1 V17901006 2585480.387 1225947.482 592.051 2 1 63429005 2585490.093 1225929.278 592.197 -1.2 0.1 -2.0 0.7 0.7 -82.5 0.9 14 7 63400008 2585457.938 1225875.320 592.130 -2.7 -0.2 -2.1 1.9 1.2 -67.2 1.4 6 3 63400013 2585456.279 1225842.415 591.724 -17081.8 -3789.3 -2.0 3.1 1.9 -79.1 2.2 2 1 V17925002 2585523.430 1225876.700 591.376 4 2 V17925003 2585572.647 1225952.922 591.421 0 0 63429011 2585534.167 1225897.972 592.072 -0.2 0.3 1.0 0.8 0.7 -67.5 0.9 12 6 V54310889 2585648.393 1226090.240 592.054 0 0 V55580206 2585610.803 1226017.003 592.188 0 0 V55580205 2585616.368 1226077.948 593.141 0 0 V55866004 2585613.145 1226112.445 633.354 0 0 V55866001 2585610.240 1226087.817 632.736 0 0 V55865501 2585614.253 1226085.701 626.371 0 0 V55865502 2585615.698 1226099.905 628.069 0 0 V55865504 2585603.148 1226091.106 626.377 0 0 V55865503 2585612.017 1226110.434 627.141 0 0 V55865005 2585620.993 1226095.343 623.541 0 0 V55865003 2585612.334 1226107.849 621.777 0 0 V55865004 2585608.933 1226101.483 623.231 0 0 sigeom sa TITRE: 00634_calc Calcul PFP3 complémentaire LE 30.04.2020 14:04 PROGR. DE TRIANGULATION LTOP VERS.: 2011.1.3 - PC(LF-8000) OPT: MENS. PTS FIXES 4.ORD. PAGE 3
Imaginons maintenant que j'aimerais récupérer la partie du texte où j'ai des points avec Y, X, H, DY, DX, etc... et que j'aimerais en faire un tableau comment est-ce que je pourrais faire ça?
Merci d'avance pour la réponse
jee pee
Messages postés
40751
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
4 février 2025
9 518
Modifié le 8 oct. 2020 à 14:04
Modifié le 8 oct. 2020 à 14:04
L'algorithme semble simple.
repère début : " POINT TYPE Y "
repère fin : " sigeom sa "
Lire le fichier ligne par ligne jusqu'à la ligne commençant par le repère de début
Sauter une ligne
Découper les lignes suivantes, les positions semblent fixes, en 3,17, 29, 41, ... pour en faire des éléments d'une liste
Éventuellement nettoyer blancs devant et derrière
Traiter les lignes jusqu'à celle commençant par le repère de fin
Utiliser la liste constituée ...
Il faudra vérifier la structure du fichier sur d'autres contenus, notamment si entête de haut de page peut se retrouver au milieu des données à récupérer.
repère début : " POINT TYPE Y "
repère fin : " sigeom sa "
Lire le fichier ligne par ligne jusqu'à la ligne commençant par le repère de début
Sauter une ligne
Découper les lignes suivantes, les positions semblent fixes, en 3,17, 29, 41, ... pour en faire des éléments d'une liste
Éventuellement nettoyer blancs devant et derrière
Traiter les lignes jusqu'à celle commençant par le repère de fin
Utiliser la liste constituée ...
Il faudra vérifier la structure du fichier sur d'autres contenus, notamment si entête de haut de page peut se retrouver au milieu des données à récupérer.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bibimul
Messages postés
30
Date d'inscription
mercredi 6 décembre 2017
Statut
Membre
Dernière intervention
18 mars 2022
8 oct. 2020 à 14:14
8 oct. 2020 à 14:14
Effectivement cela semble pas mal simplement je ne sais pas comment définir les repère de début et de fin pour dire à quel moment il faut commencer à traiter
jee pee
Messages postés
40751
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
4 février 2025
9 518
8 oct. 2020 à 14:30
8 oct. 2020 à 14:30
???
lecture ligne
si ligne(position 1 à 15) =" POINT TYPE Y " ==> debut du traitement
lecture ligne
si ligne(position 1 à 15) =" POINT TYPE Y " ==> debut du traitement
bibimul
Messages postés
30
Date d'inscription
mercredi 6 décembre 2017
Statut
Membre
Dernière intervention
18 mars 2022
Modifié le 8 oct. 2020 à 15:51
Modifié le 8 oct. 2020 à 15:51
je suis désolé mais ça fait un moment que je n'ai plus refait ce genre de chose.
Donc pour le moment j'ai ça comme code :
Donc avec ça je commence à afficher à partir du texte "NULLBERN"
Mais par contre je ne sais pas comment faire pour dire que le texte il traite ligne par ligne et à partir d'une certaine ligne
Donc pour le moment j'ai ça comme code :
with open('test.txt', "r") as f: mylist=list(f) id=[] for line in mylist: f=line.split() id.extend(f) print(id[id.index("NULLBERN"):])
Donc avec ça je commence à afficher à partir du texte "NULLBERN"
Mais par contre je ne sais pas comment faire pour dire que le texte il traite ligne par ligne et à partir d'une certaine ligne
jee pee
Messages postés
40751
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
4 février 2025
9 518
Modifié le 8 oct. 2020 à 19:36
Modifié le 8 oct. 2020 à 19:36
Pour le code sur le forum, il faut choisir dans la liste le type du source (python). Par ailleurs, j'ai modifié ton message, mais il est indispensable d'avoir aussi les indentations du code, c'est primordial, particulièrement avec python.
Beaucoup de lignes, de variables, trop, ("less is more") et je ne vois pas où tu vas.
Je pense que si tu veux écrire du python, il te faudrait suivre une formation sur le langage, depuis le début, jusqu'à la fin. Car un programmeur expérimenté est capable de trouver son bonheur en cherchant la bonne instruction, mais quelqu'un de moins affuté s'y perd.
Après, maitriser le langage et les instructions n'est pas suffisant. Il faut être capable d'imaginer une solution, une démarche, pour résoudre le problème. Là c'est l’algorithmique.
Je te propose le code suivant, qui utilise un indicateur "trait" (drapeau, flag) pour savoir quand on traite les lignes,
Tu peux alors remplacer le
Beaucoup de lignes, de variables, trop, ("less is more") et je ne vois pas où tu vas.
Je pense que si tu veux écrire du python, il te faudrait suivre une formation sur le langage, depuis le début, jusqu'à la fin. Car un programmeur expérimenté est capable de trouver son bonheur en cherchant la bonne instruction, mais quelqu'un de moins affuté s'y perd.
Après, maitriser le langage et les instructions n'est pas suffisant. Il faut être capable d'imaginer une solution, une démarche, pour résoudre le problème. Là c'est l’algorithmique.
Je te propose le code suivant, qui utilise un indicateur "trait" (drapeau, flag) pour savoir quand on traite les lignes,
.finddonne la position de la chaine recherchée, -1 si pas trouvée :
with open('fic_texte_1.txt', 'r') as txt: trait=False for ligne in txt: if trait and ligne.find("sigeom sa")>0: break # Fin elif ligne.find("NULLBERN")>0: trait=True # Debut if trait: print(ligne)
Tu peux alors remplacer le
str.stripsupprime les blancs en début et fin de chaine, et
[1:15]sélectionne la chaine de position 1 à 15
print(str.strip(ligne[1:15])+";"+str.strip(ligne[16:28])+";"+str.strip(ligne[29:40])+";"+str.strip(ligne[42:50])+"\n")
bibimul
Messages postés
30
Date d'inscription
mercredi 6 décembre 2017
Statut
Membre
Dernière intervention
18 mars 2022
9 oct. 2020 à 13:12
9 oct. 2020 à 13:12
Super merci beaucoup ça va bien m'aider.
J'ai déjà suivi un cours de python mais c'était il y a déjà deux ans donc je dois m'y remettre gentiment dedans d'où mes questions qui peuvent être de débutant.
Mais là avec vos réponses ça m'a beaucoup aider donc c'est tip top.
J'ai déjà suivi un cours de python mais c'était il y a déjà deux ans donc je dois m'y remettre gentiment dedans d'où mes questions qui peuvent être de débutant.
Mais là avec vos réponses ça m'a beaucoup aider donc c'est tip top.