2016-11-16 2 views
0

Ich habe eine neue Datei über meine IDE geöffnet und über Readlines in eine Liste umgewandelt. Warum? Weil ich sie untereinander drucken möchte. Wenn ich read() verwende, druckt es nur ein Element, während ich die ganze Liste zum Drucken brauche.Warum kann ich die Liste, die ich mit readlines() abgerufen habe, nicht in Floats umwandeln?

Die eigentliche Datei:

['Some name__________1.5 6.5 6.5\n', 'Another name________6.3 1.2 1.5\n'] 

Im Moment habe ich es geschafft, den letzten Teil der Liste zu holen, die diese gerne sieht:

1.5 3.5 4.5 
2.5 3.5 4.5 
5.5 3.5 4.5 

Was ich jetzt tun will, ist um den Durchschnitt dieser Zahlen zu berechnen, aber: Python erkennt sie nicht als Zahlen (ints, floats) überhaupt.

Wenn ich type(TheVariableThatContainsMyList) verwenden würde, zeigt es nicht den Typ davon an. Daher glaube ich nicht, dass sie Ints, Streicher oder Floats sind.

Was ich denke, was ich tun muss, ist die Elemente in dieser Liste in Floats zu konvertieren, weil sie Floats sein sollen. Aber um das zu tun, muss ich wissen, was ich falsch mache und wie ich das beheben kann.

Dies ist mein Code:

def zopenFile(): 
    fileFolder = open('TEXTFILE', 'r') 

    readFile = fileFolder.readlines() 

    for line in readFile: 
     line = line.split("_") 

     grades = line[-1] 

     print grades 

zopenFile() 

Ich versuchte grades = map(float,line[-1])

Aber in diesem Fall zu tun, die Konsole sagt: could not convert string to float: .

Der seltsame Teil ist, dass, wenn ich verwenden würde type(grades), es würde nicht sagen, dass es den Typ einer Zeichenfolge in der Konsole hat. Ich bin gerade verwirrt ... ist es eine Schnur? Ist es schon ein Schwimmer? Wenn ja, warum kann ich es nicht einfach in einen Float einordnen?

Kann mir bitte jemand in die richtige Richtung zeigen?

Und ich weiß, ich kann read() verwenden, aber ich will nicht. Kann mir jemand stattdessen zeigen, wie man es mit readlines() macht?

+0

Warum versuchen Sie auf Unterstriche aufzuteilen, wenn Ihre Beispieldaten durch Leerzeichen getrennt sind? Warum machst du 'grade = line [-1]'? – user2357112

+0

Zeigen Sie uns ein aktuelles Beispiel der Textdatei. –

+0

Entschuldigung, ich habe die tatsächliche Datei, die ich einlege, gepostet. Das ergibt jetzt Sinn, ich hoffe ... – Siyah

Antwort

1

Ihre map ist auf jedem Zeichen des Strings arbeiten, denn wenn man über einen String iterieren Sie einzelne Zeichen erhalten. Sie möchten ein anderes split verwenden, um jede Zahl in separaten Zeichenfolgen abzurufen.

grades = map(float, line[-1].split()) 
+0

Ah, also war die Liste, die ich mit den Nummern hatte, eine Zeichenfolge in diesem Fall? Was ist der Grund, warum es nicht gesagt hat, wenn ich type() benutzen würde? Danke, dass du mir geholfen hast, es sieht so aus, als ob es jetzt funktioniert! – Siyah

+0

@Siyah - Sie müssen einen Fehler gemacht haben, es ist definitiv eine Zeichenfolge. – wwii

+1

@Siyah Ihre erste 'split' erzeugte eine Liste von Strings, und Sie benutzten' [-1] ', um die letzte Zeichenkette aus dieser Liste zu erhalten. –

Verwandte Themen