[Python] Manipuler des fichers textes
Fermé
sycosis
Messages postés
16
Date d'inscription
dimanche 23 septembre 2007
Statut
Membre
Dernière intervention
15 septembre 2011
-
18 déc. 2008 à 21:13
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 19 déc. 2008 à 01:25
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 19 déc. 2008 à 01:25
A voir également:
- [Python] Manipuler des fichers textes
- Citizen code python avis - Accueil - Outils
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
- Trouver la position d'un élément dans une liste python ✓ - Forum Python
- [PyCharm] Pas d'interpréteur python ✓ - Forum Python
1 réponse
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
19 déc. 2008 à 01:25
19 déc. 2008 à 01:25
Je fais des études de linguistique et j'aimerais utiliser Python pour faire certains calculs sur des textes
Ah, qui sait, peut être notre prochaine Larry Wall :-)
Mes félicitations pour ce message nickel, c'est pas courant dans les parages, bien que le contraire d'une linguiste m'eût étonné.
Bref, venons en au fait.
En réalité ta question n'est pas bête, pourquoi ne pas agir sur le fichier directement plutôt que d'abord en retirer la chaine?
Tout simplement parce qu'un fichier n'est qu'un descripteur symbolique vers des données qui sont stockées sur un périphérique (en général un disque dur), et que pour travailler, un processeur a besoin de placer ses données en mémoire vive. Il n'est pas capable de travailler directement sur un disque.
Et c'est donc ce que fait la méthode read(): transfert disque dur -> mémoire vive. Donc tu n'as pas le choix.
Par contre l'usage de read() sans argument de longueur de lecture est réservé à des petits fichiers. Usuellement, les traitement sur de gros fichiers se font petits bouts par petits bouts.
Il y a un truc génial en python c'est l'itérateur de ligne:
Ceci dit, franchement ton fichier ne fait que 348 Ko, ce qui reste raisonable. Donc tu peux garder ton read(). Le problème c'est que si tu passes par Idle, ou autre débuggeur python, le traitement est plus lourd que si tu lançais ton programme en ligne de commande.
Donc lance plutôt la bête en ligne de commande. Pour la suite je ne saurais trop te suggérer de poster ici les parties de ton code qui prennent du temps.
Le problème est peut être aussi d'ordre algorithmique, parfois certaines manières de coder sont 100 fois moins efficaces que d'autres. Donc faudrait voir avec ton code.... que tu n'hésiteras pas à poster ici bien entendu.
Ah, qui sait, peut être notre prochaine Larry Wall :-)
Mes félicitations pour ce message nickel, c'est pas courant dans les parages, bien que le contraire d'une linguiste m'eût étonné.
Bref, venons en au fait.
En réalité ta question n'est pas bête, pourquoi ne pas agir sur le fichier directement plutôt que d'abord en retirer la chaine?
Tout simplement parce qu'un fichier n'est qu'un descripteur symbolique vers des données qui sont stockées sur un périphérique (en général un disque dur), et que pour travailler, un processeur a besoin de placer ses données en mémoire vive. Il n'est pas capable de travailler directement sur un disque.
Et c'est donc ce que fait la méthode read(): transfert disque dur -> mémoire vive. Donc tu n'as pas le choix.
Par contre l'usage de read() sans argument de longueur de lecture est réservé à des petits fichiers. Usuellement, les traitement sur de gros fichiers se font petits bouts par petits bouts.
Il y a un truc génial en python c'est l'itérateur de ligne:
f = open("monfichier, "r") for ligne in f: print ligne #Va t'afficher la prochaine ligne à chaque passage dans la boucle
Ceci dit, franchement ton fichier ne fait que 348 Ko, ce qui reste raisonable. Donc tu peux garder ton read(). Le problème c'est que si tu passes par Idle, ou autre débuggeur python, le traitement est plus lourd que si tu lançais ton programme en ligne de commande.
Donc lance plutôt la bête en ligne de commande. Pour la suite je ne saurais trop te suggérer de poster ici les parties de ton code qui prennent du temps.
Le problème est peut être aussi d'ordre algorithmique, parfois certaines manières de coder sont 100 fois moins efficaces que d'autres. Donc faudrait voir avec ton code.... que tu n'hésiteras pas à poster ici bien entendu.