Rechercher : dans
Par :

[Python] Manipuler des fichers textes

Dernière réponse le 19 déc 2008 à 01:25:32 sycosis, le 18 déc 2008 à 21:13:41 
 Signaler ce message aux modérateurs

Bonsoir à tous,

Avant tout, je précise que je suis débutante sur Python, et en programmation en général... Mes connaissances sont loin d'être optimales !

Bref, je résume ce qui me pose problème ce soir. Je fais des études de linguistique et j'aimerais utiliser Python pour faire certains calculs sur des textes (par exemple la fréquence de certains mots, des moyennes sur le nombre de mots par phrase, etc...).

Je sais comment ouvrir un fichier texte dans Python, mais j'ai des soucis en ce qui concerne l'application d'une fonction ou d'un script au contenu de ce fichier.
Je ne sais pas s'il existe une possibilité de faire cela directement, je vous montre comment j'ai procédé :


import codecs
f=codecs.open('texte2.txt',encoding='iso-8859-1')
data=f.read()

J'ai donc essayé comme précédent en transformant le contenu de mon fichier en une chaine pour pouvoir agir dessus.
Mais j'ai l'impression que cette chaine est bien trop grosse pour pouvoir être manipulée et à chaque fois que je tente une opération dessus le mode interactif de Python plante totalement et ne répond plus... (-> par exemple un data.split() ou pour couper le texte en utilisant des motifs)

Pour avoir une idée de la longueur du genre de texte que j'utilise :
http://www.gutenberg.org/files/11494/11494-8.txt

Voilà donc je ne sais pas trop s'il y a un moyen de faire cela plus simplement sans passer par une chaine ?

En tout cas désolée d'avance si ma question vous parait simpliste mais j'avoue que j'ai cherché dans différents cours et que dès qu'il s'agit de manipulation de fichiers les tutos parlent de suite choses très complexes et non pas de simple textes... Donc il n'est pas évident de trouver une réponse

Merci d'avance pour votre aide,


Sycosis

Configuration: Windows Vista
Firefox 3.0.5

Meilleures réponses pour « [Python] Manipuler des fichers textes » dans :
ImageMagick - Manipuler les images en ligne de commande VoirImageMagick est un formidable outil en ligne de commande qui permet de manipuler les images. L'avantage de cet outil est qu'il permet: d'automatiser les travaux sur les images (cela évite d'avoir à faire certaines manipulations dans...
[Python] Lire et écrire des fichiers CSV VoirLIRE ET ÉCRIRE DES FICHIERS CSV Python www.python.org, dans sa version 2.4 supporte de facto le format CSV (comma-separated values: valeurs séparées par des virgules). La Library Reference est certes très explicative à ce sujet, mais uniquement...
[MS-Dos] Ecrire dans un fichier texte en batch VoirPour écrire dans un fichier texte, il suffit d'utiliser une redirection ">" : echo texte_à_ecrire > fichier_de_sortie.txt Pour écrire à la fin d'un texte existant (concaténation) : echo "écriture a la fin du fichier ">>...
PHP - Expressions régulières VoirQu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au...
Perl - Les fichiers VoirLa notion de filehandle On appelle filehandle (traduisez descripteur de fichier), dans un programme Perl, le nom permettant de manipuler une connexion d'entrée-sortie (les entrées-sorties standards vues précédemment sont connues par les filehandles...
PHP - Affichage de texte sur le navigateur VoirLe but de PHP est de permettre la création de pages web dynamiques, ainsi son but premier est de pouvoir envoyer des données au navigateur. Les trois fonctions standards PHP fournit 3 fonctions permettant d'envoyer du texte au navigateur. Ces...

1

 kilian, le 19 déc 2008 à 01:25:32

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:

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.
Le gâteau est un mensonge!

Répondre à kilian