2010-03-27 8 views
2

Dans mon programme, j'ai un fichier texte dans lequel je lis et écris. Cependant, je voudrais afficher le contenu du fichier texte d'une manière alignée et triée. Le contenu lu actuellement:Tri et alignement du contenu d'un fichier texte en Python

Emily, 6 
Sarah, 4 
Jess, 7 

Ceci est mon code où le fichier texte en lecture et imprimé:

elif userCommand == 'V': 
    print "High Scores:" 
    scoresFile = open("scores1.txt", 'r') 
    scores = scoresFile.read().split("\n") 
    for score in scores: 
     print score 
    scoresFile.close() 

Est-ce que je dois convertir ces informations dans des listes afin de pouvoir le faire? Si oui, comment vais-je faire cela? Lorsque j'écris dans le fichier, j'ai ajouté un caractère '\ n' à la fin, car chaque enregistrement doit être imprimé sur une nouvelle ligne.

Merci

+1

Je ne le vois pas. Fournissez l'entrée et la sortie d'échantillon. –

Répondre

5

Vous pouvez utiliser le module csv, et pourrait ensuite utiliser sorted pour trier.

Soit dit de, scores1.txt suivant ont

Richard,100 
Michael,200 
Ricky,150 
Chaung,100 

test

import csv 

reader=csv.reader(open("scores1.txt"),dialect='excel') 
items=sorted(reader) 
for x in items: 
    print x[0],x[1] 

... 
Emily 6 
Jess 7 
Sarah 4 
+0

J'ai ajouté mon code ci-dessus où le contenu du fichier texte est lu et imprimé. Seriez-vous en mesure de me donner plus d'informations sur la façon d'utiliser le module csv et ce qu'il fait? –

+0

@Emily, ajouté quelques codes de test, laissez-moi savoir si vous avez encore quelques problèmes – YOU

+0

J'ai toujours des problèmes, je suis désolé. Je ne pouvais pas faire fonctionner ça. Chaque enregistrement doit également être imprimé sur une nouvelle ligne. –

0
  1. pour trier des choses en Python, vous pouvez utiliser sort()/sorted().
  2. à imprimer, vous pouvez utiliser l'impression avec spécificateurs de format, str.rjust/str.ljust, pprint etc
2

On dirait que personne n'a répondu à la « aligné » partie de votre demande. En outre, il n'est pas clair si vous voulez que les résultats soient triés par ordre alphabétique par nom, ou plutôt par score. Dans le premier cas, l'ordre alphabétique (en supposant Python 2.6):

with open("scores1.txt", 'r') as scoresFile: 
    names_scores = [[x.strip() for x in l.split(',', 1)] for l in scoresFile] 
# compute column widths 
name_width = max(len(name) for name, score in names_scores) 
score_width = max(len(score) for name, score in names_scores) 
# sort and print 
names_scores.sort() 
for name, score in names_scores: 
    print "%*s %*s" % (name_width, name, score_width, score) 

Si vous voulez par ordre décroissant score, il suffit de changer la ligne names_scores.sort() à deux:

def getscore_int(name_score): return int(name_score[1]) 
names_scores.sort(key=getscore_int, reverse=True) 
+1

@Alex, peut-être il y a une faute de frappe? la ligne commence par "name_width =" et la ligne commence par "score_width =" devrait se terminer par un ")", pas un "]" – sunqiang

+0

@sunqiang - vous avez raison, tx pour repérer cela. Modification à corriger. –

+0

Qu'en est-il de l'ordre croissant par score? –

Questions connexes