[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 8732 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 5 février 2025 - 19 déc. 2008 à 01:25
kilian Messages postés 8732 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 5 février 2025 - 19 déc. 2008 à 01:25
A voir également:
- [Python] Manipuler des fichers textes
- Citizen code python avis - Accueil - Outils
- Les textes ne doivent pas être en retrait à droite et à gauche - Guide
- Python generator - Télécharger - Sécurité
- Extraire données fichier texte python ✓ - Forum Python
1 réponse
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
5 février 2025
1 526
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.