2016-08-10 9 views
0

Ich verstehe, wie man normalerweise ein Element nicht in einer Liste auswählen würde. Mit dem Code, den ich habe, scheint diese Methode nicht zu funktionieren.Wählen Sie das Element nicht in der Liste

So habe ich eine Textdatei mit den folgenden Daten: Min: 5,6,1 Max: 5,6,1 Durchschnitt: 5,6,1

ich nur die Nummern auswählen möchten aus der Datei und erstellen Sie eine Liste von ihnen. Ich habe versucht, es nach Typ zu tun, aber das funktioniert nicht, weil alle Elemente in der Liste als Zeichenfolgen gezählt werden.

Also habe ich den folgenden Code zusammen:

inFile_test = open('in_test.txt','r') 
while True: 
    lines = inFile_test.readlines() 
    for line in lines: 
     words = [lines[0][0:3] , lines[1][0:3] , lines[2][0:3]] 
     print str(words) 
     values = [] 
     for element in lines: 
      if element not in words: 
       values.append(element) 
      print str(values) 

    else: 
     break 

Und ich bekomme die folgende Ausgabe:

['Min', 'Max', 'Avg'] 
['Min: 5,6,1\n'] 
['Min: 5,6,1\n', 'Max: 5,6,1\n'] 
['Min: 5,6,1\n', 'Max: 5,6,1\n', 'Avg: 5,6,1'] 

Ich habe das Gefühl, dass es mit meiner Liste Struktur etwas nicht in Ordnung ist, dass der Code ist zu verhindern, dass läuft richtig, aber ich bin mir nicht sicher, was es ist.

Wenn nicht, würden Vorschläge für eine bessere Möglichkeit, nur die Zahlen aus meiner Textdatei auszuwählen, sehr geschätzt werden.

+1

Was genau wollen Sie als Ihre Ausgabe? –

Antwort

1

Um ehrlich zu sein, ist Ihr Code ein Durcheinander. Warum wickelst du deine Logik in eine While-Schleife? Es wird sowieso nach der ersten Iteration beendet.

Vereinfachen von file.read anstelle von readlines:

with open('in_test.txt') as f: 
    data = f.read() 

Dann tun nur die folgenden:

>>> data 
'Min: 5,6,1 Max: 5,6,1 Avg: 5,6,1' 
>>> [int(c) for c in data if c.isdigit()] 
[5, 6, 1, 5, 6, 1, 5, 6, 1] 
0

Sie Pandas können

import pandas as pd 
df = pd.read_csv('in_test.txt',sep=r":|,",header=None,index_col=0).T 

Wenn Sie Zeile lesen möchten durch Linie

with open('in_test.txt','r') as inFile_test: 
    for line in inFile_test: 
     word,numbers = line.split(":") 
     numbers_as_float = [float(num) for num in numbers.split(",")] 
     print(word,numbers_as_float) 
+0

Verwenden Sie einen "mit" -Block, um sicherzustellen, dass Ihre Datei schließt, nicht "versuchen ... außer" –

+0

danke :) Ich dachte, nur python3 hatte 'mit'. – Javier

Verwandte Themen