2016-10-27 2 views
1

Ich versuche, Daten in eine txt-Datei in einer for-Schleife den Code [Python] mit schreiben:Wie in TXT-Datei mit linksbündigem Text in Python schreiben?

f = open('top_5_predicted_class.txt', 'w') 
    f.write('Predicted Classes' + '\t\t' + ' Class Index' + '\t' + ' Probability' + '\n\n') 

    for i in range(0, 5): 
     f.write("%s \t \t %s \t \t %s \n" % (labels[top_k][i], top_k[i], out['prob'][0][top_k][i])) 
    f.close() 

Aber die Ausgabe, die ich nicht bekam, was ich erwartet hatte. Ich möchte Klassenindex alle linksbündig sowie die Wahrscheinlichkeiten haben.

output

Jede Idee, wie kann ich das tun? Ich schätze, das Problem besteht, weil die Länge der vorhergesagten Klassen nicht festgelegt ist.

Antwort

2

Sie sollten für diese Art der Ausrichtung keine Registerkarten verwenden, da das Verhalten unvorhersehbar ist, wenn Ihre Eingaben unterschiedliche Länge haben. Wenn Sie wissen, wie groß die maximale Länge jeder Spalte ist, können Sie die Funktion format zum Auffüllen mit Leerzeichen verwenden. In meinem Beispiel verwende ich 15 Plätze:

>>> for a,b,c in [('a','b','c'), ('d','e','f')]: 
...  print ("{: <15} {: <15} {: <15}".format(a, b, c)) 
... 
a    b    c 
d    e    f 

Dies ist rein über Anzeige though. Wenn Sie Bedenken haben, die Daten zu speichern, wäre es viel besser, das CSV-Format zu verwenden, z. B. mit Pythons csv-Modul.

0

Sie können Ihre Daten und erhalten die maximale Feldbreite durchlaufen und sie dann alles auszurichten verwenden:

data = [ 
    ['tabby, tabby cat', 281, 0.312437], 
    ['tiger cat', 282, 0.237971], 
    ['Egyption cat', 285, 0.123873], 
    ['red fox, Vulpes vulpes', 277, 0.100757], 
    ['lynx, catamount', 287, 0.709574] 
] 

max_class_width = len('Predicted Classes') 
max_index_width = len('Class Index') 
max_proba_width = len('Probability') 

for entry in data: 
    max_class_width = max(max_class_width, len(entry[0])) 
    max_index_width = max(max_index_width, len(str(entry[1]))) 
    max_proba_width = max(max_proba_width, len(str(entry[2]))) 

print "{1:<{0}s} {3:<{2}s} {5:<{4}}".format(max_class_width, 'Predicted Classes', 
               max_index_width, 'Class Index', 
               max_proba_width, 'Probability') 

for entry in data: 
    print "{1:<{0}s} {3:<{2}s} {5:<{4}}".format(max_class_width, entry[0], 
                max_index_width, str(entry[1]), 
                max_proba_width, str(entry[2])) 

Ausgabe

Predicted Classes  Class Index Probability 
tabby, tabby cat  281   0.312437 
tiger cat    282   0.237971 
Egyption cat   285   0.123873 
red fox, Vulpes vulpes 277   0.100757 
lynx, catamount   287   0.709574 

Sie können auch printf Stil Formatierung verwenden:

print "%-*s %-*s %-*s" % (max_class_width, 'Predicted Classes', 
          max_index_width, 'Class Index', 
          max_proba_width, 'Probability') 

for entry in data: 
    print "%-*s %-*s %-*s" % (max_class_width, entry[0], 
           max_index_width, str(entry[1]), 
           max_proba_width, str(entry[2]))