Quelqu'un sait-il comment trier un fichier sous Python.
Mon fichier est un fichier texte, chaque variable est séparée par un ';' (point-virgule).
Je voudrais pouvoir le trier selon certaines variable.
Merci d'avance
Quelqu'un sait-il comment trier un fichier sous Python.
Mon fichier est un fichier texte, chaque variable est séparée par un ';' (point-virgule).
Je voudrais pouvoir le trier selon certaines variable.
Merci d'avance
Salut,
tu peux faire un split sur la chaine avec le point virgule en paramètre
Et ensuite tu tries la liste resultante.
Après, eventuellement tu remet la liste sous forme de texte avec la méthode dont j'ai oublié le nom :p (qui fait l'inverse du split)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 f = open('monfichier.txt', 'r') txt = f.read() f.close() txtList = txt.split(';') triTxt = sorted(txtList)
J'ai remis le nom sur la méthode inverse de split.
join()
Wala qui devrait fonctionner (pas tester)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 txt = ';'.join(triTxt) f = open('monfichier_resultat.txt', 'w') f.write(txt) f.close()
<edit> Après test, ça merdouille je sais pas trop pourquoi.
Avec ce fichier en entrée :
Ca me sort :un text;
2 text;
alors un txt;
Ca doit pas être grand chose, c'est au niveau du join que ça déconne, en fait le ';' se met au début de chaque élément de liste, et il faudrait le contraire.;
2 text;
alors un txt;un text
Soit y a moyen avec la méthode join, soit il ne reste qu'à faire une p'tite fonction pour le faire (simple).
Merci Olivier, mais si mon fichier est gros, il peut y avoir quelques difficultés à ce qu'il soit chargé en mémoire. D'où mes deux questions suivantes :Envoyé par Olivier_
1-Quelle routine utiliser dans ce cas
2-Un fichier de 256 ko est-il trop gros pour être chargé en mémoire
Merci
Salut!
1) La solution d'Olivier fonctionnera avec un gros fichier (mais ca sera forcément plus long)
2) J'ai deja chargé et "trié" des fichiers textes de plus de 15Mo en python...je pense que ca repond a ta question!
La p'tite fonction pour recréer le fichier :
Sinon, il va y avoir un pépin au niveau des sauts de lignes aussi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 def joinAfter(liste, car): string = '' for elt in liste: string += elt + car return string
Il faudrait affiner un peu la chose en supprimant les \n du doc avant de faire le split et d'ajouter les \n à la fin de chaque ligne dans la fonction "joinAfter"
Mais là, tout dépend du "format" de ton fichier.
Tes ELT; peuvent-ils se trouver sur la même ligne ou non ?
Suivant le cas, un split('\n') peut être plus adapté et il n'y aurais plus alors qu'à recoller comme il faut la liste triée.
Sinon, à la place de sorted(liste), utilise liste.sort() ça utilisera moins de "cases" mémoires. Tu n'as pas besoin de copier la liste ici (ce que fait sorted() contrairement à sort())
Si on avait une idée plus précise du fichier et des besoins ça aiderait
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager