2017-03-22 5 views
-1

Ich habe eine Liste, die zwei Tier Informationen [('alyson', '5', 'dog'), ('merlin', '6', 'cat')] Ich muss neu ordnen die Liste der Reihenfolge der Tierrasse, Name, Alter hält und dann die Sonderzeichen zu entfernen und sie schreiben wieder auf eine .txt-Datei. Ich habe versucht dafür als Liste. Meine nächste Versuch und Irrtum war das Konvertieren der Liste in eine Zeichenfolge und versuchte mit der .replace Methode. Keine der Methoden hat funktioniert. Ich habe sie vielleicht falsch benutzt. Irgendwelche Ratschläge, wo ich nachsehen kann, werden sehr geschätzt.Neuanordnung Liste und Entfernen von Sonderzeichen

edit: Das Programm soll eine Liste von Tierinformationen ziehen, die im Format ist: Rasse, Name, Alter. In einer meiner Funktionen muss ich es neu anordnen und es in Name, Alter, Rasse ausgeben. Dann würde der Benutzer fragen, ob das Tier adoptiert wird oder ein neues Tier kommt und meine Haustierliste würde darüber reflektieren. Sobald der Benutzer fertig ist, speichert das Programm die aktualisierte Liste in ihrem ursprünglichen Format. Ich habe Probleme mit den Sonderzeichen. Ich habe einen Testdruck von pet_list [0] und es würde mir eine Ausgabe von (‚alyson‘,

#This function opens the file and arranges it into an output order 
#format of the file would be: dog, alyson, 5 
def get_pet(file): 
    f = open(file) 
    pet_info = f.readlines() 
    pet = [] 
    for line in pet_info: 
     info = line.split() 
     pet_type = info[0] 
     name = info[1] 
     age = info[2] 
     pet.append((name, age, pet_type)) 
    return pet 

#this is the function where i was planning on rearranging the list back to how it originally was and 
#rewrite them back onto a text file 
def do_save(pet_list, current_file, transfer, adopt_list, transfer_list): 
    shelter_list = open(current_file, 'w') 
    print(pet_list) 
    print(type(pet_list)) 
    for line in pet_list: 
     print(type(line)) 
     shelter_list.write(str(line)) 
    shelter_list.close() 
    adopt = open("adopted.txt", 'w') 
    adopt.write(str(adopt_list)) 
    adopt.close() 
    transfer_file = open(str(transfer), 'w') 
    transfer_file.write(str(transfer_list)) 

    transfer_file.close() 
+1

Wenn Sie möchten, dass Menschen Ihnen helfen, müssen Sie Beispieleingabe, gewünschte Ausgabe und eine Beschreibung dessen, was genau "nicht funktioniert". –

+0

Sorry, wenn ich nicht mehr klar war. Ill edit es, um das widerzuspiegeln –

+0

Ist das, was Sie wollen: 'shelter_list.write (" ".join (line) +" \ n ")' – Barmar

Antwort

0

Wenn Sie nur die einzelnen Elemente neu zu ordnen und schreiben Datei. Sie String-Format kann jedes Element in . pet_list To (Rasse, Name, Alter) bis (Name, Alter, Rasse) konvertieren Sie so etwas wie diese verwenden:

pet_list = [('dog', 'alyson', '5'), ('cat','merlin','10')] 

for i in pet_list: 
    print("{1} {2} {0}".format(*i)) 

Ergebnisse in

alyson 5 dog 
merlin 10 cat 

hier drucken ich zeigen, wie, aber Anstatt zu drucken, können Sie in eine Datei schreiben:

+0

Vielen Dank. Ich musste nur ein '\ n' in das" "einfügen und es hat wunderbar funktioniert. –

2

Wenn Sie eine Liste von Tupeln (oder Listen) haben, können Sie sie mit itemgetter nach mehreren Schlüsseln sortieren. Ein Beispiel mit Dummy-Daten:

import operator 
mylist=[ 
('an2d4', '1', 'kitty'), 
('an2d4', '2', 'kitty'), 
('an2d4', '3', 'kitty'), 
('an2d4', '1', 'puppy'), 
('an2d4', '2', 'puppy'), 
('an2d4', '3', 'puppy'), 
('[email protected]', '1', 'bear'), 
('[email protected]', '2', 'bear'), 
('[email protected]', '3', 'bear'), 
('[email protected]', '1', 'wombat'), 
('[email protected]', '2', 'wombat'), 
('[email protected]', '3', 'wombat') 
] 

mylist.sort(key=operator.itemgetter(2,0,1)) 

Aufruf mylist zeigt dann, dass es durch das Element in den zweiten Index (Arten), dann der 0-te Index (Name), dann erster Index (Alter) zuerst sortiert worden ist.

for i in mylist: 
    print i 

('[email protected]', '1', 'bear') 
('[email protected]', '2', 'bear') 
('[email protected]', '3', 'bear') 
('an2d4', '1', 'kitty') 
('an2d4', '2', 'kitty') 
('an2d4', '3', 'kitty') 
('an2d4', '1', 'puppy') 
('an2d4', '2', 'puppy') 
('an2d4', '3', 'puppy') 
('[email protected]', '1', 'wombat') 
('[email protected]', '2', 'wombat') 
('[email protected]', '3', 'wombat') 

können Sie dann eine Funktion schreiben Sie Ihre 3-Punkt-Tupel Eintrag und senden Sie das ohne Sonderzeichen im Namen zu übernehmen, und durch die Liste der Listen durchlaufen.

def fixName(entry): 
    name = entry[0] 
    fixedName = ''.join([x for x in name if x.isalpha()]) 
    return((fixedName, entry[1], entry[2])) 

mylist=[ fixName(x) for x in mylist] 

for i in mylist: 
    print i 

('bddy', '1', 'bear') 
('bddy', '2', 'bear') 
('bddy', '3', 'bear') 
('and', '1', 'kitty') 
('and', '2', 'kitty') 
('and', '3', 'kitty') 
('and', '1', 'puppy') 
('and', '2', 'puppy') 
('and', '3', 'puppy') 
('bddy', '1', 'wombat') 
('bddy', '2', 'wombat') 
('bddy', '3', 'wombat') 

Dann durchlaufen Sie Ihre Liste und schreiben Sie in die Textdatei, mit welchem ​​Separator Sie wollen.

Verwandte Themen