2016-09-17 102 views
0

保存元素我有一個輸入文件遵循的Python:通過元素從輸入

0.1 #real number 
0.2 #real number 
Hello #string 
10000 #integer number 

我想讀它,並使用每一行,以「#」符號之前,在我的代碼。對於第二個部分我做

with open('input.dat') as f: 
    for line in f: 
     line = line.split('#', 1)[0] 
     line = line.rstrip() 
     print(line) #test print 
f.close() 

在這種情況下,我可以讀取並以「#」符號之前打印數量/串,但對於保存嗎? 例如,如果我想將'Hello'保存在一個名爲'name'的字符串中,'0.1'保存爲真正的'min'等等。我發現閱讀input.dat文件並保存的元素,因爲我想 最簡單的方法,就是

with open('input.dat') as f: 
    lines = f.readlines() 
f.close() 

min=lines[2] # it print me: "0.1 #real number" 

但是,我們只min=0.1,我怎麼能獲得讀取和保存程序兩者兼而有之?我在python noob,所以也許我缺乏基礎知識。

非常感謝

回答

1

你已經擁有的所有作品,你只需要把他們在正確的地方!

def remove_comment(line): 
    line = line.split('#', 1)[0] 
    line = line.rstrip() 
    return line 

with open('input.dat') as f: 
    lines = [remove_comment(line) for line in f] 

# no need for this: "with" takes care of it: # f.close() 

min=lines[2] 
1

一種方式來做到這一點是結果存儲在一個數組。接下來要做什麼取決於你的輸入是如何構成的:它總是隻包含那些類型的四個值並按照這個順序?

values = [] 
with open('input.dat') as f: 
    for line in f: 
     value = line.split('#', 1)[0] 

     if value.isdigit(): 
      values.append(int(value)) 
     else: 
      try: 
       values.append(float(value)) 
      except ValueError: 
       values.append(value) 

如果數值始終出現的順序,然後你可以做這樣的事情:

n_min, n_max, name, big_number = values 

(注:儘量避免,因爲該變量命名minmax或其他內置關鍵字可能導致問題以後)