2016-07-20 3 views
-3

Außerdem, wenn ich sie nach ihrem Alter sortieren wollte, wie könnte ich das tun? Ich versuchte myFile.sort(), aber stürzt den Code sagen Wie kann ich meine Liste nach Name/Alter getrennt sortieren?

fileName = "GuestList.csv" 
ACCESSMODE = "w" 
name = " " 
nbrGuest = " " 

myFile = open(fileName, ACCESSMODE) 
nbrGuest = input("How many guests do you have? ") 
for index in range (int(nbrGuest)) : 
    name = input("Enter guest name: ").capitalize() 
    age = input("Enter guest age: ") 
    myFile.write(name + "," + age + "\n") 
myFile.close() 
+0

müssen Sie sie zuerst in einer Art Container speichern, dann sortieren und schließlich in eine Datei schreiben. Nachdem Sie sie in die Datei geschrieben haben, können Sie sie nicht sortieren. –

+1

@RoadRunner, das OP öffnet keine vorhandene Datei: 'input' wird verwendet (zweimal) und diese Eingabeinformationen sollten gespeichert werden. –

+0

@RoadRunner Es soll die neue Datei erstellt werden, jedes Mal eine neue Liste von Namen aus Benutzereingaben. Ich möchte nur nach Name oder Alter sortieren, damit ich später die komplette Liste zeigen kann. – Pynbbz

Antwort

1

So ist der Code jetzt in zwei Teile aufgeteilt.

fileName = "GuestList.csv" 
ACCESSMODE = "w" 
name = " " 
nbrGuest = " " 


nbrGuest = input("How many guests do you have? ") 
guest_list = [] 
for index in range(int(nbrGuest)): 
    name = input("Enter guest name:\t").capitalize() 
    age = input("Enter guest age:\t") 
    guest_list.append((name, age)) 

guest_list.sort(key=lambda x: x[1]) 
with open(fileName, ACCESSMODE) as myFile: 
    for guest in guest_list: 
     myFile.write(guest[0] + "," + guest[1] + "\n") 

Der erste Teil nimmt die Benutzereingabe und speichert alle Informationen in einer Liste von Tupeln. Jedes tuple sieht z.B. aus wie ('ALEX', '24'). Nachdem die Liste der Gäste fertig ist, wird sie an Ort und Stelle mit der .sort() Methode basierend auf dem Alter der Gäste sortiert (jüngste zuerst, verwenden Sie die ,reverse=True, um die Reihenfolge umzukehren). Schließlich werden die sortierten Namen und Alter in eine Datei geschrieben, die von der with-Anweisung verwaltet wird, sodass Sie sich nicht darum sorgen müssen, sie zu schließen oder zu leeren.

+0

Super! es funktioniert perfekt. Danke – Pynbbz

-1

Doppelte Frage "Objekt kein Attribut 'Art' hat": sort-csv-by-column

import operator 
sortedlist = sorted(reader, key=operator.itemgetter(3), reverse=True) 
or use lambda 

sortedlist = sorted(reader, key=lambda row: row[3], reverse=True) 

zu beachten, dass nur die Liste in der Variable wird sortiert, nicht die Datei. Sie müssen zuerst die Liste sortieren und dann die Datei ein zweites Mal schreiben.

+0

Warum dieser Downvote? – Leogiciel

Verwandte Themen