2016-08-10 99 views
0

我明白如何通常選擇不在列表中的元素。用我的代碼雖然,該方法似乎並不奏效。選擇不在列表中的元素

所以我有一個包含以下數據的文本文件: 敏:5,6,1 最大:5,6,1 平均:5,6,1

我只想選擇號碼從文件中創建一個列表。我試過按類型做,但不起作用,因爲列表中的所有元素都被視爲字符串。

所以我總結了以下代碼:

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 

而且我得到以下輸出:

['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'] 

我有一種感覺,有什麼東西不對的問題,導致該代碼從我的表結構正常運行,但我不知道它是什麼。

如果不是這樣,建議更好地從我的文本文件中選擇數字將不勝感激。

+1

你想要什麼作爲輸出? –

回答

1

坦率地說,你的代碼是一團糟。你爲什麼在一個while循環中包裝你的邏輯?無論如何,它將在第一次迭代之後終止。

簡化使用file.read代替readlines

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

然後,只需做到以下幾點:

>>> 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

如果你想讀線可以使用熊貓

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

按行

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

使用'with'塊來確保你的文件關閉,而不是'嘗試...除了' –

+0

謝謝:)我以爲只有python3有'with'。 – Javier